[#380] bug report#3 and request#5 — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
1 message
1996/08/06
[ruby-list:408] Re: reexecute from rescue [ Re: about exception ]
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-08-12 16:21:42 UTC
List:
ruby-list #408
まつもと ゆきひろです.
In message "[ruby-list:406] reexecute from rescue [ Re: about exception ]"
on 96/08/12, Keiju ISHITSUKA <keiju@shljapan.co.jp> writes:
|
|けいじゅ@SHLジャパンです.
|>これはできません.そういう例外処理が出来るものって私は
|>CommonLispの例外処理以外知らないのですが….無いってことはな
|>んとか回避できるってことではないでしょうかねえ.
|解決策としては, どんなものが考えられるのでしょうか?
|
|クロージャをどっかに代入しておいて, 戻りたくなったらそれを実行するとい
|うのは無理でしたよね??
それは無理ですけど,
# closure は call/cc ではないので.
closureを引数などで渡しておいて例外が起きたら評価するという
のは出来ると思います.
|あと, 質問ですが, 例外からぬける方法は以下のもの以外に何かあるのでしょ
|うか?
|
|* break/ブロック最後: そのbegin...end からぬける
|* retry: begin ... end の begin から
|
|# return はやはりできなかった...
はい? 例外から抜けるというのはrescue節から抜けるという意味で
すか? それとも trap などのイテレータブロックから抜けるという
意味ですか?
rescue節は特別な制御スコープを導入しませんから,beginから再
実行するretryを除いてはbeginの外側となにも変わりません.
returnも使えます.
イテレータブロックはその場で評価されるものは普通のループと変
わりません.trapのようにclosureとして保存されてあとで評価さ
れるものは break(脱出),next(やり直し)だけしかつかえません.
今ソースを見たらreturn, retryも通しているようですが,これは
バグです.
まつもと ゆきひろ /:|)