From: Wakou Aoyama Date: 1999-03-10T13:42:13+09:00 Subject: [ruby-dev:6172] Re: Range (Re: array[last..first] (Re: Subseq of Array)) 青山です。 Wed, Mar 10, 1999 at 10:47:55AM +0900 において Tadayoshi Funaba さん曰く: > そうだとすると、原さんが指摘されたように to_a したときとは結果が違う、 > ということになりそうですが。 > > 大きさ、は置いておくとしても、Range の場合、振舞いが違うものを同じオブ > ジェクトで表現する必然性に乏しいように感じるんですけど。 ああ、(a..b).step(n) は step n の Range を生成するのではなく、step n でアクセスするという意味のつもりです。新たな Range オブジェクトを返し そうなあの書き方がまずかったですね。 それですぐ後に (a..b).each(n){|i| } というようなのを書いてはみたのです が、これは要望があるまでは必要は無いかもしれません。ただ、ruby-dev:6166 に書いたように、upto 前提から離れておけば効率の良い reverse が実装でき ますから、これは利点になるかと思います。 class Range def reverse self.to_a.reverse end end upto 前提のままではこんな感じで一度 Array を生成しなればなりませんから、 0..1000000000 なんていうのも安心して使えるという利点が失われて悲しいで すよね。 > むむむ、今だとこんなかなあ。 > > require 'date2' > > class Date > def kday_on_or_after(k) > jd = @jd + 6 > Date.new(jd - ((jd - k) + 1) % 7, @gs) > end > end > > date1 = Date.new3(1999,3,10) > date2 = Date.new3(1999,4,10) > date1.kday_on_or_after(0).step(date2, 7) do |d| puts d end なるほど。 -- 青山 和光 Wakou Aoyama