From: "U.Nakamura" Date: 2006-09-01T21:54:58+09:00 Subject: [ruby-dev:29384] Re: nil.to_s こんにちは、なかむら(う)です。 In message "[ruby-dev:29380] Re: nil.to_s" on Sep.01,2006 20:31:37, wrote: | |正直、将来展望が一番納得いかない、というか、それならnil.to_s | |もNoMethodErrorじゃないの? とかいう気がします。嫌ですけど。 | | to_iやto_fなどと違いto_sはObjectに定義されていますから、 | NoMethodErrorは絶対におかしいでしょう。また、to_sは「そのオ | ブジェクトの文字列表現」です。現在、nil.to_sで""を返していて | 困ってないのは、いくつかの局面(putsとかprintfとか)でnilを特 | 別扱いしているからです。それは美しくないんでないかと。 | | その他の点でどう納得行かないのか聞かせてくださいませ。 | | |というわけで、 | | String(nil) #=> TypeError | | Objectにto_sがあるのにString(nil)が失敗するとなると、 | String()が失敗する基準というのが(うささんの頭の中に)なにかあ | るんですかね。to_strがあるものだけ変換可能とか? いずれも、見た感じ(それはつまり書いた感じでもあるわけですが) での一貫性を求めているわけですが、「感じ」じゃ説明にも説得に もならないでしょうねえ。 # 実際、ああいう形でリストを書くと、それなりに賛同する人も多 # いようなので、同じような「感じ」を共有する人も多いようでは # ありますが。 さて、to_sが「そのオブジェクトの文字列表現」であるのはそうで すが、前田さんも書かれたように、nilオブジェクトの文字列表現が 空文字列であることは自然であると思います。 また、putsやprintfでの特別扱い(後者は実はよくわかんないんです が)ですが、nil.to_sを変えずにその特別扱いの方をやめる、という 選択肢はないのでしょうか? nil.to_sを変えても、putsなどでの特別扱いをやめても、いずれに せよ非互換が発生するわけですが、私としては特定のメソッドに非 互換部分が閉じ込められる方がよさそうに感じます。 あと、String()が失敗する基準ですが、実はぜんぜん基準はありま せんでした。弱い。 String()とInteger()・Float()とは比較できるほど同じ思想にはな い、ということになるのですかね。 それでは。 -- U.Nakamura