浏览 2498 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-22
ruby 代码
运行结果是: 1 2 3 4 3 4 3 4... 3,4会一直循环。 这是为什么呢? 我的理解是,loop的时候会输出1234,然后创建一个continuation对象并返回。c.call的时候就会回到代码的第6行,用当时的堆栈信息执行程序知道结束。 那么,假设程序是在return cont后结束,结果就应该是123434;假设程序会再次调用c.call(也就是又第13行),那么结果应该是123434123434....。这个12343434...是怎么来的呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-22
c = ContinuationDemo.loop
这一行执行后打印出1,2,3,4 c.call 这一行执行后跳回上次callcc时的执行环境,c = ContinuationDemo.loop的位置,执行循环里剩下的部分,打印出3和4,然后又执行c.call,如此循环,于是结果就是1234343434。。。 做个实验: $counter = 0 class ContinuationDemo def self.loop cont = nil for i in 1..4 puts i callcc {|continuation| cont = continuation} if i == 2 end $counter += 1 return cont end end c = ContinuationDemo.loop puts "==" c.call if $counter < 5 结果: 1 2 3 4 == 3 4 == 3 4 == 3 4 == 3 4 == JE的代码拷下来怎么带行号的?出错了一次,删得手疼,将就着看吧。。 |
|
返回顶楼 | |