From: EGUCHI Osamu Date: 2000-02-29T13:28:25+09:00 Subject: [ruby-dev:9314] Re: [fix] String#* with huge string えぐち@エスアンドイー です。 >>> In message [ruby-dev:9313] Re: [fix] String#* with huge string On Tue, 29 Feb 2000 11:52:48 +0900, matz@netlab.co.jp (Yukihiro Matsumoto) said: > まつもと ゆきひろです > > In message "[ruby-dev:9312] Re: [fix] String#* with huge string" > on 00/02/29, EGUCHI Osamu writes: > > |String#[](と String#[]=の添字の有効範囲っは > |-2^31 〜 2^31 - 1 って理解であってますか? > > signed longの範囲内です。 なるほど、そうすると文字列の長さの取り得る範囲は、 0 〜 LONG_MAX ですか?(ULONG_MAX ではないですよね) これは負のインデックスが末尾から数える事で、 「負のインデックスを使わないとアクセスできない範囲」 が生じるかという事を気にしています。 #現実的に問題になる事は多分なさそうな気も、、、 > でも、今見返したら結構intで受けてい > る箇所がたくさんありました。実用上問題はないのですが、そろえ > た方が良いですね。 たしかに int で受けていいるところが散見されますね、 まぁ、ギガバイトの文字列なんて使う機会はちょっと 考えにくいけど、VM のページ的に疎なオブジェクトが できれば使い道あるかも知れない。 > | % ruby -e 'a = [1,2,3,4] ; p a[3.14]' > | 4 > | % ruby -e 'a = "abc" ; p a[3.14]' > | /tmp/rbd40713:1:in `[]': invalid index for string (IndexError) > | from /tmp/rbd40713:1 > | > |の様に、 Array#[] は Float を許して、 > |String#[] が許さないのは、どちらかに > |統一した方が良いように思えます。 > > 私が考えているようにNUM2LONGを使うならば、StringもFloatを許 > すようになります。もっともNUM2LONGがFloatを許すのは間違いだ > と言う考え方もありえるでしょうが。 やはり NUM2LONG を使うのが順当ですね。 Array#[] と String#[] で Float を添字とした時の 挙動に一貫性があれば、どちらでも良いと思います。 えぐち