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.