【发布时间】:2020-09-04 09:51:32
【问题描述】:
朋友,我需要帮助解释一下:在下面的 Ruby 代码中,循环做什么条件白蚁?它应该是一个无限循环,但是,它是如何终止的呢?
# Ruby code
fib = Enumerator.new do |y|
a = b = 1
loop do
y << a
a, b = b, a + b
end
end
p fib.take(10) # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
我们将非常感谢您的贡献。
【问题讨论】:
-
顺便说一句,在 Ruby v2.7 中,Ruby 僧侣为我们提供了 Enumerator::produce 方法,它简化了一些枚举器的创建,包括生成斐波那契数的枚举器:
enum = Enumerator.produce([0, 1]) {|n1, n2| [n2, n2+n1]}。例如,前 8 个斐波那契数由arr = enum.take(8) #=> [[0, 1], [1, 1], [1, 2], [2, 3], [3, 5], [5, 8], [8, 13], [13, 21]]给出,然后是arr.map(&:first) #=> [0, 1, 1, 2, 3, 5, 8, 13]。
标签: ruby enumerable enumerator take