如果我使用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
更具惯用性吗?
答案 0 :(得分:0)
在Ruby中,considered a bad practice使用raise/fail
来控制流,因为它们非常慢。
所以回答你的问题raise StopIteration if x > CUTOFF
并不是摆脱循环的惯用方式