在 Ruby 中迭代一个块非常简单——它干净利落地完成并继续执行其余代码。
另一方面,使用 Enumerator 进行迭代有点令人困惑。如果您在没有块的情况下调用 :each ,则会返回一个 Enumerator 。然后可以在 Enumerator 上调用 :next 以获取每个下一个迭代值。
然后奇怪的部分 - 当迭代完成时,而不是 Enumerator 返回 nil,它抛出一个异常:“迭代到达结束”。结果是它甚至没有返回值。
例如:
test = [ 'test_value' ]
enumerator = test.each
enumerator.next
>> "test_value"
enumerator.next
>> StopIteration: iteration reached at end
这样做的原因仅仅是因为枚举器可以返回 nil 值吗?答案只有在我发布此内容时才出现(所以我仍将发布它),但似乎必须如此。
如果是这样,这是处理此类问题的典型方式吗?使用异常来处理基本上按预期执行的代码似乎很奇怪。