如果我使用Ruby普查員來實現發電機和一個過濾器:「破」與在「拋出StopIteration異常」一個Ruby枚舉
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
會更高性能,但在這裏更0123是慣用嗎?
斷裂了,因爲你與'lazy'我個人選擇'提高StopIteration'工作的慣用方式。 –
這似乎是使用ruby的一種非常pythonic的方式。根據你正在努力完成的任務,可能有更好的方法來實現它 – Zack
@Zack這個例子不是我真正用例的非常具有代表性的 - 只是一個非常簡單的例子來演示我遇到的問題。真正的生成器進行一系列api調用,批量獲取記錄,每次記錄一條記錄,直到需要獲取另一批記錄爲止。這全部包裹在另一個Enumerator中,用於過濾掉與調用代碼相關的記錄。 – ivan