From: Tadayoshi Funaba Date: 1999-03-10T19:18:13+09:00 Subject: [ruby-dev:6200] Re: Range (Re: array[last..first] (Re: Subseq of Array)) ふなばです。 >>> Wed, 10 Mar 1999 13:42:13 +0900 の刻に 「wakou」、すなわち >>> wakou@fsinet.or.jp(Wakou Aoyama) 氏曰く > 大きさ、は置いておくとしても、Range の場合、振舞いが違うものを同じオブ > ジェクトで表現する必然性に乏しいように感じるんですけど。 wakou> ああ、(a..b).step(n) は step n の Range を生成するのではなく、step n wakou> でアクセスするという意味のつもりです。新たな Range オブジェクトを返し wakou> そうなあの書き方がまずかったですね。 いや、逆に、この件では生成するなら、とりあえず問題ないと思うんですけど (それもイヤですけど)。 step n でアクセスっていうけど、それはオブジェクトの状態を変えているっ てことじゃないんですか。 >>> Wed, 10 Mar 1999 03:25:00 +0900 の刻に 「wakou」、すなわち >>> wakou@fsinet.or.jp(Wakou Aoyama) 氏曰く wakou> (a..b).step(n).each{|i| } ということですから。 初期化の時点で、そうなっているなら、そーいうもん、でよいと思うけど、ひ とつのオブジェクトが、Range 自身の都合でいろいろに振る舞う可能性がある、 というのは今まではなかったですよね。これはよいんでしょうか。 僕は、Range に対して範囲式という構文の支援がある、というよりも、範囲式 を活かすべく、 Range が用意されていると考えたほうが納得できます。step を導入したとしても、step にそういうものがないと、 あまり魅力的でないと 考えます。 上にようなことをするにも、数値なら Numeric#step をつかったほうが素直だ し、 必要なら文字列についても String#step の導入を検討すればよいという 話になると思うのです。 あまり現実的な提案はできないのですが、たとえば、10,9..1 というような表 現ができれば、それはとても魅力的だと思うし、文字列には上り鈍行しかあり ませんが、という弁解も許したくなります。 最初の話にもどりますが、僕がやるなら、 Range.new(first,last,next=first+1) もしくは、 Range.new(first,last,step=1) にして、 first、last は比較できれば良しとする、first は step メソッドをもってい なくてよい (今でも、upto がなくても文句はいわれない。もちろん、each は できない)。 step メソッドは引数 step あるいは next を受け付ける建前だが、必ずしも 要求に応えなくてよく、応えられなければ例外にする。 ただし、step=1 ある いは next=first+1 は必須で、それはこれまでの upto 相当になる。 ということにして、構文の支援があることを最低限の条件にしたいです。 ふなば ただよし