我想在以下代码中提供一些帮助:
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)||工作工作?我想我理解组件部分并不是整个线路的作用。 (有没有另外一种写作方式可能更好地帮助我理解?)。
(编辑:这段代码是一个非常略微修改过的例子,从第295页开始,从初学者到初学者到专业第二版,由Peter Cooper撰写。)
答案 0 :(得分:2)
根据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 result