这里的红宝石新手。试图编写一个简单的ruby代码来继续,但下面的代码将打印非停止整数2,3,4,5,6 ......(每行一个数字)。这里肯定有一个明显的错误。感谢。
require "continuation"
def dum ()
i = 1
callcc {|cc| $c = cc}
i += 1
puts i
end
dum() #expect to print 2
$c.call #expect to print 3
$c.call #expect to print 4
我的红宝石翻译是1.9.3p0
答案 0 :(得分:3)
$ c.call完全跳回设置的执行上下文,因此你的脚本在调用dum()和调用$ c.call的第一行之间反复交替,从不到达最后一行。这是流程:
dum()
方法已定义dum() #expect to print 2
:脚本调用dum()
一次,为$c
设置执行上下文,然后打印2
$c.call #expect to print 3
跳回到前一行对dum()
的调用 - 执行的顶级上下文字面上会移回上一行。这次dum()
打印3 $c.call #expect to print 3
行,并将继续在这两行之间无限制地交替。该脚本永远不会到达您的最后一行$c.call #expect to print 4
。
修改脚本以产生预期输出的一种方法:
require "continuation"
def dum ()
i = 1
callcc {|cc| $c = cc}
i += 1
puts i
return i
end
k = dum() #expect to print 2
$c.call unless k >= 4 # reach this line 3 times: print 3, and then 4, and then move on
我希望这会有所帮助。