[#380] bug report#3 and request#5 — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
1 message
1996/08/06
[ruby-list:410] Re: reexecute from rescue [ Re: about exception ]
From:
Date:
1996-08-13 05:44:00 UTC
List:
ruby-list #410
けいじゅ@SHLジャパンです.
ナガーイメイルは後に回します. 今日中に返事ができればいいんだけど... あ
と, pipeの件もあるし...
In [ruby-list :00408 ] the message: "[ruby-list:408] Re: reexecute
from rescue [ Re: about exception ] ", on Aug/13 01:21(JST)
matz@caelum.co.jp (Yukihiro Matsumoto) writes:
>それは無理ですけど,
># closure は call/cc ではないので.
>closureを引数などで渡しておいて例外が起きたら評価するという
>のは出来ると思います.
?? 良く分からん. と思ったら, 次のメイルに書いてありましたね.
In [ruby-list :00409 ] the message: "[ruby-list:409] Re: reexecute
from rescue [ Re: about exception ] ", on Aug/13 01:49(JST)
matz@caelum.co.jp (Yukihiro Matsumoto) writes:
>具体的なコードで書くと以下の通りです.
>
>def each(lambda)
> begin
> ...
> yield ..
> rescue
> lambda.call
> retry
> end
>end
>
>each(proc{...}) {
> ...
>}
なるほど, 例外が起こった時の処理を イテレータブロック(?)として渡すわけ
ですね. この方法なら対処できそうです.
Smalltalk の
coll remove: elm ifAbsent: [...]
と同じ考えですね. ruby でも こういう感じのメソッドがあるかと思って調べ
ましたがありませんでした. やはり, 例外があるからかな?
>|あと, 質問ですが, 例外からぬける方法は以下のもの以外に何かあるのでしょ
>|うか?
>|
>|* break/ブロック最後: そのbegin...end からぬける
>|* retry: begin ... end の begin から
>|
>|# return はやはりできなかった...
>
>はい? 例外から抜けるというのはrescue節から抜けるという意味で
>すか? それとも trap などのイテレータブロックから抜けるという
>意味ですか?
rescue節でした.
>rescue節は特別な制御スコープを導入しませんから,beginから再
>実行するretryを除いてはbeginの外側となにも変わりません.
>returnも使えます.
そうすると, break で rescue 節を抜ける(begin..endを終る)ことはできない
のですね?
# return が使えなかったのは, mainモジュールだったからでした...
>イテレータブロックはその場で評価されるものは普通のループと変
>わりません.trapのようにclosureとして保存されてあとで評価さ
>れるものは break(脱出),next(やり直し)だけしかつかえません.
>今ソースを見たらreturn, retryも通しているようですが,これは
>バグです.
ふむふむ...
In [ruby-list :00409 ] the message: "[ruby-list:409] Re: reexecute
from rescue [ Re: about exception ] ", on Aug/13 01:49(JST)
matz@caelum.co.jp (Yukihiro Matsumoto) writes:
>さらによくソースを見ると break を通していませんでした.これ
>もバグです.今までの説明と動作が食い違っていましたね.ごめん
>なさい.
trap(closureも含めて)中で, breakは意味が分かりましたが, nextはどういう
動作を行なうのでしょうか?
__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----