From: Shugo Maeda Date: 2006-09-02T22:56:31+09:00 Subject: [ruby-dev:29412] Re: nil.to_s 前田です。 Yukihiro Matsumoto wrote: > putsがnilを出力しないのは、あきらかに不便だと思います。私に > とっては天秤にかける内容ではないのですが。実際のところはそう > でもないのかな。 ちょっと困るケースを想像できませんでした。 nilが"nil"と出力されると、なひさんが書かれたようなバグの発見に役 立つケースはあるかもしれませんが、IO#writeではnilを特別扱いして ないわけですし、ちょっと中途半端な気がします。 > to_sはprintで、inspectはpで使われる、というのがこれら二つの > メソッドの違いです。逆に言えばそれ以上の明確な違いは定義され > ていないわけですね。ですから「『そのオブジェクトがどんなもの > であるか』がはっきり分かる文字列であるべき」というのは絶対条 > 件ではありません。ただ、一般論として他の区別できない文字列表 > 現は良くない(ので、従来のto_sのうちあまり望ましくないものが > あった(arrayとかhashとか))とは思っています。 to_sにはそういう役割は期待していなかったので、この話にはちょっと 驚きました。 自分がto_sを書く時には、printやwriteで出力する時に一番便利そうな 形式の文字列を返すようにしていました。 よくMailクラスとかにto_sでRFC822形式の文字列化する機能を付けて そのままパイプでsendmailにprintして投げたりするんですが、こういう 使い方はまつもとさんの想定外ということでしょうか。 > 逆に、区別することを重要視せず、従来のままnil.to_sは空文字列 > としても構わないって言えば構わないんですが、その場合には今度 > は「nilの意味」に踏み込むことになりますね。将来定義されうる > あらゆるto_xxxはnilから零元に変換されるべきだ、とか? 直近だ > とcomplexやrationalの組み込みが予定されてますよね。 加えて、零元に相当するものがない型に変換する場合は、empty?が 真を返すようなオブジェクトに変換することにしてはどうでしょう。 -- 前田 修吾