2015-10-01 12 views
5

タイトルが述べるように、イテレータが完了しているかどうかをチェックする適切な方法を知りたいと思います。イテレータが完了したかどうかを確認する適切な方法は何ですか?

私は、ドキュメントに何かを見つけることができませんでしたが、私はsourceでこのようなものが見つかりました:

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 

はこれが正しいと適正であるか異なっているが私が使うべき方法。

答えて

3

はい、これは正しい方法です。しかし、ほとんどの場合、nextを処理する必要はありません。イテレータをチェーンして結果を得るだけです。

+1

ありがとうございました。今私はちょうどいくつかのコードを移植しているので、私は可能な限り直接変換を行い、おそらく後でリファクタリングします。 –