[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も通しているようですが,これは
バグです.
                                まつもと ゆきひろ /:|)

In This Thread

Prev Next