5

タイトルにある通り、イテレータが完了しているかどうかを確認する適切な方法を知りたいです。

ドキュメントには何も見つかりませんでしたが、ソースに次のようなものが見つかりました。

iter.next.is_a? Iterator::Stop

おもちゃの例:

a = "a世c"
b = a.each_char

puts b.next # a
puts b.next # 世
puts b.next # c
puts b.next # #<Iterator::Stop:0x8ccbff8>

if b.next.is_a? Iterator::Stop
  puts "DONE" # successfully prints DONE
end

これは正しくて適切ですか、それとも別の方法がありますか。

4

1 に答える 1

3

はい、それが正しい方法です。しかし、ほとんどの場合、 を処理する必要はありませんnext。反復子をチェーンして、それらから結果を取得するだけです。

于 2015-10-01T23:05:45.757 に答える