From: Shin'ya Adzumi Date: 2002-06-04T19:24:29+09:00 Subject: [ruby-dev:17308] Re: Range + Enumerable(Re: [ruby-list:35305] Re: ((1.2)..(3.4)).to_a) あづみです。 Yukihiro Matsumoto wrote: > |で、未だに [ruby-dev:17244] の考えが抜けないのですが、succ があるか > |どうかよりも、Numeric#step のようにもっと大きな塊を各クラスに任せる > |のがいいのではないかと思ってます。step が指定できるようになったとし > |て、負の数が指定できるか、少数が指定できるかなどは各クラスに任せる > |という感じで。例えば String は正の整数だけしか受けないとか。 > > これは結構有効そうなアイディアだと思います。 > > exclude_endだけRange側でチェックしても(Floatの誤差には目をつ > ぶるとして)良いのではないでしょうか。 となると、この方向で話を進めるとした場合、残っているのは、 * どうやって step を指定するか * succ の代わりに何を呼ぶようにするのか といった辺りでしょうか。後者は Numeric の場合は Numeric#step が使える ので他のクラスも step でいいのではないかと思います。幸い step という 名前は他でも使われてないようですし。 で、前者ですが、 * Range::new(begin,end,exclude_end,step) * (1..2).new_step(step) で新しい Range を返す(自分自身は変えない) という感じかなと思ってます。従来の 1..2 という表記の場合は step は未 設定で、その時の動作はそれぞれのオブジェクトに任せる(例えば今の Numeric#step は step が省略されると 1 が指定されたものとして動作しま すよね。そんな感じです)というので良いと思います。 あと、new_step という名前は適当なのですけど、Range は immutable なの で、set_step(step) とか step=(step) とかはふさわしくない気がしてて、 良い名前が思い浮かんでません。 安積伸弥 adzumi@denpa.org