In message "[ruby-list:6291] Re: i++"
on 98/02/05, Yuji Shigehiro <sigehiro / asama.rd.ecip.osaka-u.ac.jp> writes:
|しげひろです.
|ですが, 「イテレータが何回繰り返したか」という情報は, 本来イテレータが
|備えている性質で, イテレータとともに実装される * べき * なのでしょうか?
いやあ,私は違うと思いますね.
|オブジェクト指向的に考えると, ここで用意されるべきは
|
| カウンタークラス ??
|
|のようなものだと思います.
あ伊藤さんが紹介してましたね.
|> 外部イテレータでしたら,カーソルオブジェクトに聞けば良いんでしょ
|> うけど.
|ところで, これ↑は無いんでしょうか. (実は, 欲しかったりする.)
さすがに汎用のは作れなかったんですが,個別のクラス用のは簡単
です.以下は配列用の外部イテレータの例です.
class AryIter
def initialize(ary)
@ary = ary
@pos = 0
end
def first
@pos = 0
end
def succ
if @pos >= @ary.size
raise RangeError, "iterate over the array length"
end
val = @ary[@pos]
@pos += 1
val
end
def more
if @pos < @ary.size
return true
end
false
end
end
ary = [1,2,3,4,5,6,7,8,9]
iter = AryIter.new(ary)
while iter.more
p iter.succ
end
# こういう時nextが予約語なのが痛い….
Threadと組み合わせたりすると汎用の外部イテレータが定義できる
かも知れません.
まつもと ゆきひろ /:|)