From: Shugo Maeda Date: 1999-04-21T09:32:33+09:00 Subject: [ruby-list:13964] Re: What is callcc? (Re: iterator <-> cursor) 前田です。 At Tue, 20 Apr 1999 09:37:56 +0900, Inaba Hiroto wrote: > うーーーーん、継続をcallした時、ローカル変数へ代入した値も保持され > ると思っていたら、method内のローカル変数は戻るんですね。procの動的 > ローカル変数と、トップレベルのローカル変数は戻らないのですが。 なぜそうなるかというと、ローカル変数はスタックに割り当てられるの で、callccでスタックをコピーする時にその時点でのローカル変数の状 態を保存してしまうからです。 逆にブロックローカル変数の方はヒープに割り当てられるためコピーさ れないので、それ以降の変更が有効になります。 Schemeの仕様に合わせるには、けっこうインタプリタに手を入れる必要 があると思うのですが、undocumented featureのためにそこまでやって もよいのかなあ...。 -- 前田 修吾