[ruby-dev:3469] Re: Exception

From: keiju@... (石塚圭樹 )
Date: 1998-08-25 05:57:19 UTC
List: ruby-dev #3469
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :3466 ] the message: "[ruby-dev:3466] Re: Exception ", on
Aug/24 22:47(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>|irb(main):003:0> fail Foo
>|TypeError: casting non-exception
>|
>|これだと何が原因で例外が発生しているのかわかりません(;_;
>|
>|メッセージ的にはFooが例外ではないっていっているようですが, 実際は第2引
>|数がないために発生しているんですよね?
>
>fail/raiseは引数パターンが多いので,ユーザの意図を読み取れな
>いrubyには引数の数を間違えたのか,例外を送るつもりで例外クラ
>スを指定したのか区別できません.ということで,rubyは例外を期
>待したのに例外が来なかったので,casting non-exception と文句
>を言ってるのですが,筋が通りませんか?

うーん. 確かにユーザの意図が読みとれないのも確かですが...

raise Foo, "mes"
raise Foo.new
raise Foo.new, "mes"

が許されているのに,

raise Foo

が来たからですね... どういう間違いか確かにわからない...

# 私は, 後者のパターンは知らなかったので, 1つにしか解釈しませんでした
# が...

>そのように感じる場合には,ではどういう場合にはどういうエラー
>を出すべきだと思いますか?

うーん.

In [ruby-dev :3467 ] the message: "[ruby-dev:3467] Re: Exception ", on
Aug/24 23:23(JST) MAEDA Shugo writes:

>前田です。

>|メッセージ的にはFooが例外ではないっていっているようですが, 実際は第2引
>|数がないために発生しているんですよね?
>
>例外オブジェクトじゃなくて例外クラスを渡しているから
>エラーになっているという意味ではないでしょうか。

どうもそうみたいですね.

>引数が一つで、例外クラスが渡された場合は、クラスじゃなくて
>インスタンスを渡してくれという旨のメッセージにした方が、
>親切かもしれませんね。

うーん....

例外の使用頻度からいうと

頻度大 raise Foo, "mes"
頻度小 raise Foo.new, "mes"
頻度小 raise Foo.new

だと思うんですよ. ですので, 

raise Foo

は, 引数の数を間違えていると考える方が良いような気がするのですが... で
も, 前田さんのいう通り逆の間違いの可能性もありますし... 両方がわかるメッ
セージになっているといいんですが.

PS.
でも, raiseのパターンって本当に多いですね. 例外クラスでinitializeが定
義されているかどうかでも動きが違うみたいだし(@@;;;

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread