Re: [心得] Ruby 的 '延續' 物件 : Continuation

看板Ruby作者 (Test)時間18年前 (2006/09/13 15:49), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
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

09/13 16:06, , 1F
所以說他的想法是做到 Local 內部延續,但是對於外部
09/13 16:06, 1F

09/13 16:07, , 2F
變數並不會紀錄
09/13 16:07, 2F
文章代碼(AID): #151xVp58 (Ruby)
文章代碼(AID): #151xVp58 (Ruby)