From: toyofuku@... Date: 1999-04-14T02:40:57+09:00 Subject: [ruby-list:13704] Re: What is callcc? (Re: iterator <-> cursor) 豊福@パパイヤです。 原さん > |この例の > |・|@cont| に渡されるものは何ですか。 > > これが「継続」ってやつですね。 > > |・@cont.call では何が起きますか。 > > 「継続」を継続します。(^^; (^_^;) これだと何もわかりませんね。 :-) > もう少し言うと > callcc { |cont| .... } > を実行すると、callcc の直前の状態(変数の割り当てとかループ > カウンタとか。オブジェクトの状態ではない。)を記憶して この状態にグローバル変数の値も含まれますか。 > cont > に代入し、.... を実行します。cont の指しているこのオブジェク > トは Continuation クラスのインスタンスであり、これに .call(x) > すると x を callcc の返り値として、先に記憶した状態を復元し、 > callcc の後に実行が移ります。 > で、いいのかなあ。 C言語でいうと ret = callcc { |cont| .... } は if ((ret = setjmp(cont)) == 0) { .... } で、 cont.call(x) は longjmp(cont, x); みたいなもんですかね。 --- 豊福@パパイヤ unbound@papaya.juice.or.jp toyofuku@juice.or.jp