新井です。

かなり、返事が遅れました・・・自分の中ではとりあえず様子見が
いいかなと今は思います、が言い出しっぺですので意見を書いてお
きます。

>>> From: matz / netlab.co.jp (Yukihiro Matsumoto)
>>> Date: 29 Nov 1999 01:07:23 +0900
>>> Subject: [ruby-dev:8440] Re: NameError (Re:  Re: Exception handling)

> まつもと ゆきひろです

> 否定しません。が、今の方が便利なこともありますよね。

うーん、便利な場合というのが思いつかないです。
もし何か例がありましたら教えていただけませんか?

> 付随してなにがStandardErrorであるべきかについて明確になると
> いいなあと思います。たとえばSyntaxErrorはどうなのかとか。

Exception
  Interrupt
  NotImplementError
  SignalException
  StandardError
    ArgumentError
    FloatDomainError
    IOError
      EOFError
    IndexError
    LoadError
    LocalJumpError
    NameError
    RuntimeError
    SecurityError
    SyntaxError
    SystemCallError
      Errno::Exxx
    SystemStackError
    ThreadError
    TypeError
    ZeroDivisionError
  SystemExit
  fatal

こうして例外クラスを見直してみると、結構致命的なものでも、
StandardErrorのサブクラスであることが多いですね。そうか、例
外なんだから当然か。

結局これまでは、ちゃんとrescue節にクラスを指定するのが基本だっ
たってとこなのかな?でも、rescue修飾子はその選択肢をはずすわ
けですよね?うーん。

「最初に私が抱いた不安」を考慮してあげると、かなりの例外を
StandardErrorから外した方がよいということになりますが、そこ
までする勇気が私にはない・・・

・rescue修飾子が補足できるクラスの階層をもう1レベルさげる

・例外の補足を意図することがあまりないものは現状維持。

って案を考えましたが、うーん。うーん。知恵熱が出そうだ。

Exception
  Interrupt
  NotImplementError
  SignalException
  StandardError
    FloatDomainError
    LoadError
    LocalJumpError
    NameError
    SecurityError
    SyntaxError
    SystemStackError
    ThreadError
    TypeError
    ZeroDivisionError
    NancharaKanchara	<- rescue修飾子用 (名前は...)
      ArgumentError
      IndexError
      IOError
	EOFError
      RuntimeError
      SystemCallError
	Errno::Exxx
  SystemExit
  fatal

ちょっと適当に分けてみました。ご意見ありますか?

rescue修飾子で補足したい例外ってスクリプト書く人にとっては何
か1つ2つだけを期待するような気がするんですよね。

$ touch foobar
$ ruby -e 'opne("foobar") rescue STDERR.puts "No such file"'
=> No such file

--
新井康司 (Koji Arai)