[ruby-list:409] Re: reexecute from rescue [ Re: about exception ]

From: matz@... (Yukihiro Matsumoto)
Date: 1996-08-12 16:49:44 UTC
List: ruby-list #409
まつもと ゆきひろです.

In message "[ruby-list:408] Re: reexecute from rescue [ Re: about exception ]"
    on 96/08/13, Yukihiro Matsumoto <matz@caelum.co.jp> 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 を通していませんでした.これ
もバグです.今までの説明と動作が食い違っていましたね.ごめん
なさい.
                                まつもと ゆきひろ /:|)

In This Thread

Prev Next