継続 (勉強中)

task で定義される一連の流れを中断し,別の処理を実行している.そして戻ってくる.

また,別の処理へ値を渡したり,受け取ったりしている.

(↓テストコードですのであしからず)

def task
  v = 1
  puts "step.1"
  # ↓ 継続を返し,返した先で継続が呼び出されると callcc が con.call(arg) の引数を返す
  v = callcc {|c| class << c; attr_accessor :value; end; c.value = v; return c }
  puts "step.2"
  v = callcc {|c| class << c; attr_accessor :value; end; c.value = v; return c }
  puts "step.3"
  v = callcc {|c| class << c; attr_accessor :value; end; c.value = v; return c }
  puts "finish."
end

con = task
puts "return value=#{con.value}." if not con.nil?
con.call(con.value + 1) if not con.nil?

実行結果

$ ruby test_callcc.rb
step.1
return value=1.
step.2
return value=2.
step.3
return value=3.
finish.