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