まつもと ゆきひろです.

In message "[ruby-list:396] Re: about exception"
    on 96/08/09, 石塚圭樹 <keiju / shljapan.co.jp> writes:
|けいじゅ@SHLジャパンです. 

|ただ, errno って POSIX で標準化されているんでしたっけ? ちゃんと標準化
|されているのなら, いいのですが, 標準かの度合によっては, OS毎で互換性が
|なくなってきますね...
|
|それに, 非POSIX OSでは, 全然違うし...

そうなんですよ.文字列にしておけば「人間に分かる情報」が入っ
ている,で済むんですけど,シンボルや数値にしちゃうとプラット
フォーム間でどうやって整合性をとるかという話になっちゃうでしょ
う?

たとえば将来NT版を作ったりすることを考えるとちょっと避けたい
気になりません? 

|>メソッドが無いとか,定数が無いとか,コンパイル型の言語ならコ
|>ンパイル時に分かるようなものは例外にせずエラーにしたら良いの
|>ではないかという気がしてきました.まてよ,なんで例外に一本化
|>したんだっけな? なんか理由があったような….
|
|きっと, eval でエラーを起こすのがいやだったのでは? 

まあ,evalではエラーを例外に変換し直せば済むことなんですけど,
もう3年も前のことなので,すっかり忘れてしまった.手元の記録
によるとエラーと例外の統合が行われたのは,93年11月27日です.
でも,理由は書いてないんだな.

|>  * 複数の例外が発生してしまう場合はたしかにありえると思う.
|>    が,その場合でも本当に区別しなければならない場合は少ない
|>    と考えている($!で分岐すれば現在でも可能).
|
|そうですねえ. (B)タイプの例外処理を行なわないのならば, あまりないとは思
|うのですが...
|
|例えば,

  (中略)

|とかやりたくなるのは, 私が(B)タイプの例外処理に毒されているせい??

多分,そうなんでしょう(ensureはrescueの間違いですよね).

  f = open(name)

だけとか(例外は捕捉しない,プログラムは中断)

  begin
    f = open(name)
  rescue
    f = 代わりのディスクリプタ
  end

くらいがrubyらしい感じがします.

|>  * ただし,コンパイル型の言語ならコンパイル時に見付けられる
|>    ような「エラー」も例外になっているrubyの問題点(欠点?)に
|>    ついては今回初めて認識した.これについては対策を検討する
|>    (が,なにもしないかもしれない).

|昔松本氏が, 文字列を読み込んで, 逐次evalするスクリプトを書きましたが, 
|ああいうのは例外としてキャッチできないと困りますよね.

昔の実装ではevalでエラーが起きた時には例外に直していたような
気がします(うろおぼえ).

それとエラーを例外に変換するイテレータがあったように思います.
イテレータブロックの中でエラーが発生すると,それを捕捉して例
外をあげるというものです.

|文字列で比較するのは, 気分が悪いというだけです. 文字列は, 一般に唯一性
|の保証がないので, エラーのようなものは, コードかシンボルで比較したいと
|いうことでした. 

Cじゃないんですから文字列の比較をそんなに嫌わなくても….

|PS.
|質問. rubyのエキスパートは何と呼ぶのでしょう?
|rubypert? rubynitian?

TeXじゃないんだから(苦笑).
rubyist(ルビイスト)というのはどうでしょう?

                                まつもと ゆきひろ /:|)