打印

[技术介绍] Ruby中的Continuation让时光倒流

Ruby中的Continuation让时光倒流

大家对Continuation可能还比较陌生,但它是个好东西
按手册介绍说:它包含返回地址和执行上下文,允许从程序的任何地方返回到callcc block的结尾处。
使用continuation 我们就可以实现“月光宝盒”,重返往日某时某刻。那还不赶快来见识一下?
举个例子来说:
def cont
 a=nil
 for i in 1..4
  puts i
  callcc {|continuation| a=continuation} if i==2
 end
 return a
end
在irb中,我们执行
x=cont
它会输出
0
1
2
3
4
当再调用 x.call时会输出
3
4
看,我们又重新回到了2这个时光点。
至于它的应用,大家可以发挥了。。。
本帖最近评分记录
  • quzhongwei R币 +3 长期以来人们认为:Ruby不可以正确处理尾调用 ... 2008-6-14 17:11

TOP

长期以来人们一直认为:Ruby不可以正确处理尾调用,你能构造个例子吗?

可以参考下列例子:
http://www.ibm.com/developerworks/cn/opensource/os-lightweight9/

[ 本帖最后由 quzhongwei 于 2008-6-14 17:26 编辑 ]

TOP

我个人认为:Java/.NET就不能正确处理尾调用!

TOP

实际上ruby1.8中的continuation还不能进入实际使用阶段。
有大最的bug
非安全的
有个比较权威的continuation的讲座
http://www.atdot.net/~ko1/pub/ContinuationFest-ruby.pdf
不过continuation即使有这些问题,但还是能给我们带来不少作用的。比如在Debug中。或对商业环境要求不是非常严格的情况下使用。
或许ruby2.0能给我们带来真正的continuation

[ 本帖最后由 wtbwtb 于 2008-6-14 19:13 编辑 ]

TOP

期待中,哈!
Flying Piggy...! 
天地人合一!

TOP

2008-11-22 19:13 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61