けいじゅ@日本ラショナルソフトウェアです. 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 <<---