From: matz@... (Yukihiro Matsumoto) Date: 1996-08-13T01:49:44+09:00 Subject: [ruby-list:409] Re: reexecute from rescue [ Re: about exception ] まつもと ゆきひろです. In message "[ruby-list:408] Re: reexecute from rescue [ Re: about exception ]" on 96/08/13, Yukihiro Matsumoto writes: ||クロージャをどっかに代入しておいて, 戻りたくなったらそれを実行するとい ||うのは無理でしたよね?? | |それは無理ですけど, |# closure は call/cc ではないので. |closureを引数などで渡しておいて例外が起きたら評価するという |のは出来ると思います. 具体的なコードで書くと以下の通りです. def each(lambda) begin ... yield .. rescue lambda.call retry end end each(proc{...}) { ... } |イテレータブロックはその場で評価されるものは普通のループと変 |わりません.trapのようにclosureとして保存されてあとで評価さ |れるものは break(脱出),next(やり直し)だけしかつかえません. |今ソースを見たらreturn, retryも通しているようですが,これは |バグです. さらによくソースを見ると break を通していませんでした.これ もバグです.今までの説明と動作が食い違っていましたね.ごめん なさい. まつもと ゆきひろ /:|)