From: "U.Nakamura" Date: 2006-09-02T01:14:46+09:00 Subject: [ruby-dev:29396] Re: nil.to_s こんにちは、なかむら(う)です。 In message "[ruby-dev:29390] Re: nil.to_s" on Sep.01,2006 23:46:52, wrote: | 「putsの方を変える」というのは、どういう風に変えることを想定 | しているんでしょうね。nil.to_sを""のままにするなら、「変えな | い」のが一番良いと思うのですが。 前田さんが私と同じ意見だとして、[ruby-dev:29384]にも書いたよ うに、putsにおけるnilの特別扱いをやめる、ということです。 おそらくそれは、nilの場合だけ"nil"という文字列を出力させてい たことを指すのだと思いますが、それをせずに他のオブジェクトと 同じくrb_obj_as_string()に渡す、つまりto_sの結果である""が出 力される、ということです。 ですが、これは、nil.to_sを"nil"に変える理由のひとつがその特別 扱いにあるということだから、であって、本当のところを言えば、 これもやはり変えないままでよければそれが無難でしょう。 # そりゃ、何も変えないのが無難には決まってますが... | nilというのは「なんでもない」ことを意味するオブジェクトで、 | 数値でも数値的なオブジェクトでもありませんから、(to_iによる) | 数値への変換対象であるというのは不自然なことだと思います。同 | 様にnil.to_sは「そのオブジェクトがどんなものであるか」がはっ | きり分かる文字列であるべきで、それは空文字列ではなく、"nil" | という表現ではないかと感じました。 to_sの結果が「『そのオブジェクトがどんなものであるか』がはっ きり分かる文字列であるべき」とすると、inspectとの住み分けはど うなるのでしょうか? リファレンスによれば、to_sが「オブジェクトの文字列表現」であ り、inspectが「オブジェクトを人間が読める形式に変換した文字列」 だとありますが、to_sが今回まつもとさんが説明されたような目的 のものであるとすると、この二つのメソッドの違いがよくわからな くなってしまいます。 それでは。 -- U.Nakamura