Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > continuationライブラリ > Continuationクラス
class Continuation
クラスの継承リスト: Continuation < Object < Kernel < BasicObject
Abstract
継続を表すクラスです。
[[unknown:組み込み関数]] Kernel.#callcc { |cont| ... } の呼び出し は、直前の状態(ローカル変数の定義、スタックフレーム)を cont に記憶 してブロックを実行します。cont は、Continuation クラスのインスタ ンスで、Continuation#call メソッドを実行するこ とでいつでも記憶した状態を継続することができます。
C 言語の setjmp()/longjmp() がわかる人は
setjmp() == callcc {|c| } longjmp() == c.call
と考えれば、わかりやすいかも知れません(ただし、callcc はスタックが深く なる方向にもジャンプ出来るという違いがあります)
callcc() は、ブロックの戻り値を返しますが、Continuation#call(args) が呼び出されたときは args を返します。
例:
以下は、Continuationによる無限ループの例 def LOOP c = nil yield callcc {|c| true} c.call(false) end LOOP {|v| p v} => true false false false : :
callcc とは、call-with-current-continuation の略です。
インスタンスメソッド
self[*ret] -> ()
call(*ret) -> ()
-
self が記憶した状態を継続します。引数は そのまま Kernel.#callcc の戻り値になります。
- [PARAM] ret:
- 継続に復帰した時に返す値を指定します。