前田です。 At Tue, 27 Jul 1999 12:29:41 +0900, 石塚圭樹 <keiju / Rational.Com> wrote: > callccで渡されるContinuationは代入しないと意味がないのに, 今の仕様だと代 > 入がなんか技巧的なんですよね... > > callcc{|$cc|...} 私はこういうのは嫌なので、 callcc{|c| $cont = c; ...} とします。 代入しないと意味がないということはなくて、 callcc {|c| .... c.call(obj) ... } みたいなcatch/throw的な使い方もありますよね。 Schemeでは、もともとはこちらの用途のために使られたものなのではな いでしょうか。 # むかしはcall/ccじゃなくてcatchという名前だったらしいですし。 > >というのも考えたのですが、callした時にContinuation.newの返り値が > >(Continuationではない)objになったりするのはちょっと変ですよね。 > > 変と言うかないときっとまずいんでしょ? きっと, > > cc = nil > if callcc{|cc| true} > ... > > cc.call{false} > > 見たいなことしたいんですよね? if c = Continuation.new ... c.call(false) というのは技術的には可能ですけど気持わるいですよね。 > >たしかにRubyでは大域脱出にcall/ccを使う必要はないので、イテレータ > >にしているのはちょっとムダな感じはしますけど、代案が思いつかなかっ > >たのでこのようにしました。 > > ということは上記みたいな使い方はしないのかな? イタレータブロック内でContinuation#callを呼ばない(つまり大域脱出 に使わない)のなら、イタレータにする必然性はないと思います。 きれいなインタフェイスが思いつきませんが。 -- 前田 修吾