作者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