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

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

>前田です。

>> ところで, callcc{|c| ...}で引数にContinuationを渡すというのはRuby的には
>> 非常に使いづらい仕様だと思うのですが...
>
>では石塚さんはどういう仕様がよいと思われます?

いや. いい案ないんですけどね(^^;;;;;;;

>私はSchemeのcall/ccと同じ表現力を持たせることを考えて今の仕様にし
>ました。
># Schemeに比べてわかりにくくなっているということはないと思うのですが。

どうなんでしょう? schemeしらないのですが, Rubyで言うところのラムダ式ない
の初出の変数はブロックローカル変数になるんですかね? 

callccで渡されるContinuationは代入しないと意味がないのに, 今の仕様だと代
入がなんか技巧的なんですよね...

callcc{|$cc|...}

とか

callcc{|@cc|...}

とか

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

とか...

最後の何かすごい間違いの元だよなぁって感じてしまいますが, それが強制され
るのが, ちょっと....

>c = Continuation.new
>...
>c.call(obj)
>
>というのも考えたのですが、callした時にContinuation.newの返り値が
>(Continuationではない)objになったりするのはちょっと変ですよね。

変と言うかないときっとまずいんでしょ? きっと,

cc = nil
if callcc{|cc| true}
...

cc.call{false}

見たいなことしたいんですよね?

>Continuation.newをget_continuationなどという関数風メソッドにして
>も、やっぱりContinuationではないものが返り値になるのは気持わるい
>ですし...。

これでも同じですよね.

>たしかにRubyでは大域脱出にcall/ccを使う必要はないので、イテレータ
>にしているのはちょっとムダな感じはしますけど、代案が思いつかなかっ
>たのでこのようにしました。

ということは上記みたいな使い方はしないのかな?

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