とりあえずコードだけ!
Rangeとして使うにはsuccと<=>演算子が使えないと駄目だ!
class Hoge attr_reader :value def initialize value = 0 @value = value end def succ @value += 1 self end def <=>(other) @value <=> other.value end end h1 = Hoge.new h2 = Hoge.new 4 (h1..h2).each { puts "aa" }
# 2006/12/25追記
おっと、succで自分自身の状態変えたら駄目っぽい?
ってことでこういう風に
class Hoge def initialize value = 0 @value = value end def succ n = Hoge.new @value + 1 return n end def <=>(other) @value <=> other.value end protected attr_accessor :value end h1 = Hoge.new h2 = Hoge.new 10 (h1..h2).each { |h| p h }
実行結果は
#<Hoge:0x2940230 @value=0> #<Hoge:0x2940118 @value=1> #<Hoge:0x2940104 @value=2> #<Hoge:0x29400b4 @value=3> #<Hoge:0x2940078 @value=4> #<Hoge:0x294003c @value=5> #<Hoge:0x2940000 @value=6> #<Hoge:0x293ffc4 @value=7> #<Hoge:0x293ff88 @value=8> #<Hoge:0x293ff4c @value=9> #<Hoge:0x293ff10 @value=10>
OK!ばっちり。