From: "NARUSE, Yui" Date: 2006-09-05T08:25:45+09:00 Subject: [ruby-dev:29482] Re: nil.to_s 成瀬です。 Tatsuki Sugiura wrote: > 個人的には成瀬さんの書かれている、 > >>>> In Message "[ruby-dev:29419] Re: nil.to_s" >>>> <44FA2227.9010209@airemix.com>, >>>> "NARUSE, Yui" said; >> nil は例外の一種だと思っています。 >> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/7999 >> を見るともともと IndexError だったようですし。 > >> あくまでエラー値であり、無というよりも悪意のこもった無だけれど、 >> 強制的に変換した場合は、「なかったことにする」零元になる、とか。 > > と言うエラー値の話が個人的には一番しっくりきます。 賛同ありがとうございます(ぉ > ただ、「なんにもない」と「なんでもない」は概念的にはかなり違いがあるん > ではないでしょうか。nil が「なんでもない」というか「未定義/不明」を > 表すものなら、"nil" という文字列を返すよりも、いっそ全部のメソッドが > 失敗するようにしておくのが自然に思えます。 現在の Ruby の組み込みクラスで、nil の意味をざっと調べてみました。 * array[2..5] = nil (配列の範囲削除) * print "hoge" の戻り値 (void) * hash[key] のような「IndexError」の nil * str.capitalize! のような「変更なし」の nil * IO#close のような「成功」の nil * /a/=~'B' で返る「失敗」の nil * EOF に達した時の nil * IO#readlines の行区切り指定等、デフォルト値を用いることを示す nil ちょっと意外だったのは、TypeError に相当するものが無いことと、 明らかな「未定義/不明」が無いことでしょうか。 Ruby が 代入 = 宣言 であることの影響なのですかね。 to_s はそもそも String でないものを String にするものですから、 String 自身のような自明のもの以外をどこまで変換可能かは程度の問題で、 どれが自然というのはそこまでないように感じます。 なので、全てが String になる、方が、人工的ではあれど一貫性があるかと。 # 自明なものを変換するために to_str がありますね むしろ to_s とは何か、が問題なのですかね、 Array#to_s や Hash#to_s のことも考えると。 # Ruby の nil を見ていると、攻殻機動隊でのタチコマの言葉を思い出します。 # 「神は 0 と似ているのではないか。 #  システムをシステムたらしめるための存在なんだろう」という -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA