作者Schelfaniel (Test)
看板Ruby
标题Re: [心得] Ruby 的 '延续' 物件 : Continuation
时间Wed Sep 13 15:53:56 2006
Continuation 之前看过一下, 我觉得是很有趣的概念啦...
可惜 Lisp 那边的 Continuation 还没看到 @_@
( Lisp 是, 明明很简单的东西都可以弄到看起来很复杂,
也许这就是所谓的进入障碍吧, 虽然有人是说很直觉就是了 ...)
Continuation Ruby 的感觉上只会记录 Local 的变数
以下例子 1:
def con_loop
for i in 1..5 do
puts "#{i} #{$j}"
callcc { |a| return a } if i == 2
puts '#'
$j += 1
end
return nil
end
$j = 1
puts 'Before loop call'
cont = con_loop()
puts 'After loop call'
$j = 10
cont.call if cont
puts 'After continuation call'
结果如下
Before loop call
1 1
#
2 2
After loop call
#
3 11
#
4 12
#
5 13
#
After loop call
After continuation call
看来 $j 并没有被 reset(没被记录)
另一个例子也是一样
class TestContValue
attr_accessor :v
def initialize
@v = 1
end
end
def con_loop
test
for i in 1..5 do
puts "#{i} #{test.v}"
callcc { |a| return a } if i == 2
puts '#'
test.v += 1
end
return nil
end
puts 'Before loop call'
testvalue = TestContValue.new
cont = con_loop(
testvalue)
puts 'After loop call'
testvalue.v = 10
cont.call if cont
puts 'After continuation call'
结果也是一样, 物件内的值没有被 Reset @_@
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.220.34.34
1F:推 giive:所以说他的想法是做到 Local 内部延续,但是对於外部 09/13 16:06
2F:→ giive:变数并不会纪录 09/13 16:07