Fiber.yield 使用 ||
Fiber.yield using ||
我需要以下代码的帮助:
sg = Fiber.new do
s = 0
loop do
square = s * s
s += 1
s = Fiber.yield(square) || s
end
end
puts sg.resume
puts sg.resume
puts sg.resume
puts sg.resume 40
puts sg.resume
puts sg.resume 0
puts sg.resume
puts sg.resume
当运行时,输出:
0
1
4
1600
1681
0
1
4
第6行如何计算s = Fiber.yield(square) || s 工作?我想我只了解组成部分而不是整个生产线在做什么。 (有没有其他的写法可以更好地帮助我理解?)。
(编辑:此代码是 Peter Cooper 'Beginning Ruby, From Novice to Professional 2nd Ed' 第 295 页的示例,经过轻微修改。)
根据 yield
的文档
Any arguments passed to the next resume
will be the value that this Fiber.yield
expression evaluates to.
行
s = Fiber.yield(square) || s
将传递给 resume
的参数分配给 s
。如果该值为 nil
(或缺少参数),s
将重新分配给 s
(即它不会更改)。
示例:
sg.resume #=> s = nil || s
#=> s = s
sg.resume 40 #=> s = 40 || s
#=> s = 40
另一种写法是:
result = Fiber.yield(square)
s = result if result
我需要以下代码的帮助:
sg = Fiber.new do
s = 0
loop do
square = s * s
s += 1
s = Fiber.yield(square) || s
end
end
puts sg.resume
puts sg.resume
puts sg.resume
puts sg.resume 40
puts sg.resume
puts sg.resume 0
puts sg.resume
puts sg.resume
当运行时,输出:
0
1
4
1600
1681
0
1
4
第6行如何计算s = Fiber.yield(square) || s 工作?我想我只了解组成部分而不是整个生产线在做什么。 (有没有其他的写法可以更好地帮助我理解?)。
(编辑:此代码是 Peter Cooper 'Beginning Ruby, From Novice to Professional 2nd Ed' 第 295 页的示例,经过轻微修改。)
根据 yield
Any arguments passed to the next
resume
will be the value that thisFiber.yield
expression evaluates to.
行
s = Fiber.yield(square) || s
将传递给 resume
的参数分配给 s
。如果该值为 nil
(或缺少参数),s
将重新分配给 s
(即它不会更改)。
示例:
sg.resume #=> s = nil || s
#=> s = s
sg.resume 40 #=> s = 40 || s
#=> s = 40
另一种写法是:
result = Fiber.yield(square)
s = result if result