質問

Rubyでブロックを繰り返すのは簡単です - きれいに終了し、その他のコードに進みます。

列挙子を繰り返すことは、もう少し混乱している。呼び出す場合:ブロックなしでそれぞれ、代わりに列挙子が返されます。:次に、次の反復値を取得するために列挙子で呼び出されます。

と奇数の部分 - 列挙体が完了した場合、列挙子がNILを返す代わりに、「終了時に繰り返し」をスローします。その結果、それが値を返さないことです。

例えば:

test = [ 'test_value' ]
enumerator = test.each
enumerator.next
>> "test_value"
enumerator.next
>> StopIteration: iteration reached at end
.

は、この理由は単にNIL値が列挙子によって返されることができるようになるのですか?私がこれを投稿するときだけ私に答えが起こります(だから私はそれをまだ投稿するつもりです)、そうでなければならないようです。

それでも、このような問題を処理する典型的な方法はありますか?本質的に予想通りに実行するコードを処理するために例外を使用することは奇妙なようです。

役に立ちましたか?

解決

nilを列挙子によって有効な値として返すことができるようにするために正しいことです。これが典型的なのかどうかという質問に答えるには、PythonはStopIterationとも呼ばれる例外を使用して同じ方法で処理します。

>>> my_list = [1,2,3]
>>> i = iter(my_list)
>>> i.next()
1
>>> i.next()
2
>>> i.next()
3
>>> i.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
. もちろん、ほとんどのnextは直接呼ばれていません(代わりにeachまたはforループが使用されている)ので、この根本的なメカニズムはしばしばそれにさらされていません。

他のヒント

yeah、nilはまだ結果である結果、戻る価値がないとは異なります。それは基本的に変数にアクセスしようとしているのと同じです。これが、NILを返すのではなく例外が必要な理由です。あなたがそのoutを考え出したように聞こえます: - )

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top