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

From:
Date: 1996-08-14 08:06:50 UTC
List: ruby-list #416
けいじゅ@SHLジャパンです. 

In [ruby-list :00412 ] the message: "[ruby-list:412] Re: reexecute
from rescue [ Re: about exception ] ", on Aug/13 19:12(JST)
matz@caelum.co.jp (Yukihiro Matsumoto) writes:

>そうでしょうね.今までのところあまりこういう使い方が必要なこ
>とはありませんでした.私は無い時には「無いよ」といわれる方が
>好きです.

あのう.

array#delete(elm)

は, 無いよともいってくれませんが...

普通は, 本当に消したかどうかは分からなくてもいいのかも知れませんが, 知
りたい時もあるのでは...

こういう時, デフォルトでは何もしないような例外があると便利ですね.

つまり, 

a.delete(elm)

で, elmがない時は例外を発行するが, キャッチしない限りそのまま通り過ぎ
る.

で,

begin
  a.delete(elm)
rescue 
  ...
end

と明示的に書くと例外が捕捉できる.

こういう例外があると, 

while gets
...

の問題も解決しそう.

この種の例外は, 結局 resume の機能が必要になるような気がするので, 今の
ままでは実現は不可能ですかね?

>できません.rescue節はif文のelse節と同じで特別に脱出できる構
>文ではないのです.

なるほど.

>|trap(closureも含めて)中で, breakは意味が分かりましたが, nextはどういう
>|動作を行なうのでしょうか?
>そのclosureの最初から実行をやり直します.

これに関して, いっぱいメイルが来ていましたね(^^;;

In [ruby-list :00415 ] the message: "[ruby-list:415] local exits ", on
Aug/14 11:32(JST) matz@caelum.co.jp (Yukihiro Matsumoto) writes:

>  break
>  next
>  redo
>
>    そのループを頭から再実行する.

イテレータブロックの場合は, retry と同じ動作を行なうわけですね.

>  return
>
>    現在の関数の実行を終了する.トップレベルからはreturn出来
>    ない(コンパイルエラーになる).lambdaの中からはreturnでき
>    ない(実行時エラーになる).

lambda の中からのreturnは, 状況によっては良いと思うのですが, 安全のた
めにできないようになっているのですか?

>  retry
>    rescueで使われた時
>    イテレータの中で使われた時
>    イテレータブロックで使われた時
>
>        イテレータの実行を(イテレータの引数の評価から)やり直す

これってどういう意味ですか?

>違和感があった原因はやはり繰り返さないイテレータの存在でしょ
>うね.うーむ名前を変えないといけないかなあ.しかし,以前のま
>ま continue だったらもっと違和感があったなあ.

名前は難しい問題ですね.

__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----

In This Thread

Prev Next