けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :15672 ] the message: "[ruby-list:15672] Re: debugger
exception handle (Re: Modified debug.rb) ", on Jul/27 13:10(JST) Shugo
Maeda writes:

>前田です。

>> callccで渡されるContinuationは代入しないと意味がないのに, 今の仕様だと代
>> 入がなんか技巧的なんですよね...
>> 
>> callcc{|$cc|...}
>
>私はこういうのは嫌なので、
>
>callcc{|c| $cont = c; ...}
>
>とします。

それはどちらでもよいですが(^^;;;

それでもローカル変数に代入したいときに気になりますね.

cc = nil
callcc{|c| cc = c; ...}

まあ, callccを使える人はローカル変数の問題は知っていると言うことでいいの
かも知れませんが...

>代入しないと意味がないということはなくて、
>
>callcc {|c| .... c.call(obj) ... }
>
>みたいなcatch/throw的な使い方もありますよね。

おお. 気が付かなかった... そういう使い方をするとなるとパラメータで渡され
なくてはまずいですね.

>Schemeでは、もともとはこちらの用途のために使られたものなのではな
>いでしょうか。
># むかしはcall/ccじゃなくてcatchという名前だったらしいですし。

ふーん. そうでしたか...

>if c = Continuation.new
>...
>
>c.call(false)
>
>というのは技術的には可能ですけど気持わるいですよね。

ですね. ムシズが走りますね(^^;;;

>> >たしかにRubyでは大域脱出にcall/ccを使う必要はないので、イテレータ
>> >にしているのはちょっとムダな感じはしますけど、代案が思いつかなかっ
>> >たのでこのようにしました。
>> 
>> ということは上記みたいな使い方はしないのかな?
>
>イタレータブロック内でContinuation#callを呼ばない(つまり大域脱出
>に使わない)のなら、イタレータにする必然性はないと思います。

ここの意味やっとわかりました(^^;;;

>きれいなインタフェイスが思いつきませんが。

うーん. ですね...

..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---