我需要一些关于以下代码的帮助:
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 )的第295页“起始Ruby,从新手到专业第二版”中的一个修改过的例子。)
发布于 2015-08-07 21:23:52
根据yield的文档
传递给下一个
resume的任何参数都将是此Fiber.yield表达式的值。
线
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 resulthttps://stackoverflow.com/questions/31886629
复制相似问题