"破" vs"提高StopIteration"在Ruby枚举器中

时间:2016-12-15 20:44:52

标签: ruby enumerator

如果我使用Ruby Enumerators来实现生成器和过滤器:

generator = Enumerator.new do |y|
  x = 0
  loop do
    y << x
    x += 1
    break if x > CUTOFF
  end
end.lazy

filter = Enumerator.new do |y|
  loop do
    i = generator.next
    y << i if i.even?
  end
end

我是否使用

打破了生成器的循环,这有什么不同
break if x > CUTOFF

VS

raise StopIteration if x > CUTOFF

两者似乎都有效。我认为break会更高效,但raise更具惯用性吗?

1 个答案:

答案 0 :(得分:0)

在Ruby中,considered a bad practice使用raise/fail来控制流,因为它们非常慢。

所以回答你的问题raise StopIteration if x > CUTOFF并不是摆脱循环的惯用方式