From: Yukihiro Matsumoto Date: 2006-09-02T20:32:46+09:00 Subject: [ruby-dev:29409] Re: nil.to_s まつもと ゆきひろです In message "Re: [ruby-dev:29396] Re: nil.to_s" on Sat, 2 Sep 2006 01:14:46 +0900, "U.Nakamura" writes: |前田さんが私と同じ意見だとして、[ruby-dev:29384]にも書いたよ |うに、putsにおけるnilの特別扱いをやめる、ということです。 |おそらくそれは、nilの場合だけ"nil"という文字列を出力させてい |たことを指すのだと思いますが、それをせずに他のオブジェクトと |同じくrb_obj_as_string()に渡す、つまりto_sの結果である""が出 |力される、ということです。 | |ですが、これは、nil.to_sを"nil"に変える理由のひとつがその特別 |扱いにあるということだから、であって、本当のところを言えば、 |これもやはり変えないままでよければそれが無難でしょう。 |# そりゃ、何も変えないのが無難には決まってますが... putsがnilを出力しないのは、あきらかに不便だと思います。私に とっては天秤にかける内容ではないのですが。実際のところはそう でもないのかな。 |to_sの結果が「『そのオブジェクトがどんなものであるか』がはっ |きり分かる文字列であるべき」とすると、inspectとの住み分けはど |うなるのでしょうか? |リファレンスによれば、to_sが「オブジェクトの文字列表現」であ |り、inspectが「オブジェクトを人間が読める形式に変換した文字列」 |だとありますが、to_sが今回まつもとさんが説明されたような目的 |のものであるとすると、この二つのメソッドの違いがよくわからな |くなってしまいます。 to_sはprintで、inspectはpで使われる、というのがこれら二つの メソッドの違いです。逆に言えばそれ以上の明確な違いは定義され ていないわけですね。ですから「『そのオブジェクトがどんなもの であるか』がはっきり分かる文字列であるべき」というのは絶対条 件ではありません。ただ、一般論として他の区別できない文字列表 現は良くない(ので、従来のto_sのうちあまり望ましくないものが あった(arrayとかhashとか))とは思っています。 これらの違いをどう明確化するかですが、inspectはtruncateする ことがあるが、to_sはしない、とかかなあ。 逆に、区別することを重要視せず、従来のままnil.to_sは空文字列 としても構わないって言えば構わないんですが、その場合には今度 は「nilの意味」に踏み込むことになりますね。将来定義されうる あらゆるto_xxxはnilから零元に変換されるべきだ、とか? 直近だ とcomplexやrationalの組み込みが予定されてますよね。 まつもと ゆきひろ /:|)