Les*_*nis 5 ruby ruby-on-rails
我对理解该Enumerator.new方法的工作方式有点挣扎.假设文档中的示例:
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]
Run Code Online (Sandbox Code Playgroud)
循环中断条件在哪里,它如何知道循环应迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)?
Enumerator内部使用纤维。你的例子相当于:
require 'fiber'
fiber = Fiber.new do
a = b = 1
loop do
Fiber.yield a
a, b = b, a + b
end
end
10.times.map { fiber.resume }
#=> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |