【发布时间】:2017-04-04 04:34:21
【问题描述】:
我正在尝试查看课堂幻灯片。该代码应该打印一次“早期工作”,然后打印两次“后期工作”(您可以设置后期工作的重复次数)。但我想知道为什么这段代码不起作用,我该如何修改代码?由于现在代码将生成“稍后工作”的无限循环,而不是 2(应该是)
require 'continuation'
def work
p "early work"
here = callcc {|here| here}
p "later work"
return here
end
def rework(k)
entry = work
k.times do |i|
entry.call(entry)
end
end
rework(2)
【问题讨论】:
-
“不起作用”是什么意思?你的标题提到了一个无限循环,你怎么看这个清单?
-
是的,执行代码会无限输出“后期工作”。很抱歉有歧义。
-
将
entry.call(entry)更改为entry.call()应该会给您所需的行为(尽管它仍然会因运行时错误而停止) -
别在意我之前的评论,它实际上并没有解决它。另一方面,Ruby 解释器确实发出警告,
callcc已被弃用,不应再使用 -
是的,我试过只打印两次。还是谢谢