Rubyでブロックを繰り返すのは簡単です。それはきれいに終了し、残りのコードに進みます。
一方、列挙子で繰り返すのは少し混乱します。ブロックなしで:eachを呼び出すと、代わりに列挙子が返されます。次に、列挙子で:nextを呼び出して、次の各反復値を取得できます。
そして奇妙な部分-反復が完了すると、列挙子がnilを返す代わりに、「反復は最後に到達しました」という例外をスローします。その結果、値も返されません。
例えば:
test = [ 'test_value' ]
enumerator = test.each
enumerator.next
>> "test_value"
enumerator.next
>> StopIteration: iteration reached at end
これは、列挙子がnil値を返すことができるようにするためだけの理由ですか?答えは私がこれを投稿するときにのみ私に起こります(それで私はまだそれを投稿するつもりです)が、そうであるに違いないようです。
もしそうなら、これはそのような問題を処理する典型的な方法ですか?例外を使用して、基本的に期待どおりに実行されるコードを処理するのは奇妙に思えます。