Re: [心得] Ruby 的 '延續' 物件 : Continuation
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
09/13 16:06, 1F
→
09/13 16:07, , 2F
09/13 16:07, 2F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章