[#29374] nil.to_s — Shugo Maeda <shugo@...>

前田です。

59 messages 2006/09/01
[#29375] Re: nil.to_s — "U.Nakamura" <usa@...> 2006/09/01

こんにちは、なかむら(う)です。

[#29380] Re: nil.to_s — Yukihiro Matsumoto <matz@...> 2006/09/01

まつもと ゆきひろです

[#29387] Re: nil.to_s — Shugo Maeda <shugo@...> 2006/09/01

前田です。

[#29390] Re: nil.to_s — Yukihiro Matsumoto <matz@...> 2006/09/01

まつもと ゆきひろです

[#29398] Re: nil.to_s — "NARUSE, Yui" <naruse@...> 2006/09/01

成瀬です。

[#29400] Re: nil.to_s — Yukihiro Matsumoto <matz@...> 2006/09/01

まつもと ゆきひろです

[#29491] symbol and string — Tanaka Akira <akr@...>

open-uri で :proxy=>nil という指定を行うと、以下のようにエラーになります。

33 messages 2006/09/05
[#29499] Re: symbol and string — Yukihiro Matsumoto <matz@...> 2006/09/05

まつもと ゆきひろです

[#29500] Re: symbol and string — Tanaka Akira <akr@...> 2006/09/05

In article <1157470154.047826.13379.nullmailer@x31.priv.netlab.jp>,

[#29503] Re: symbol and string — Yukihiro Matsumoto <matz@...> 2006/09/06

まつもと ゆきひろです

[#29504] Re: symbol and string — Tanaka Akira <akr@...> 2006/09/06

In article <1157505538.340126.8472.nullmailer@x31.priv.netlab.jp>,

[#29507] Re: symbol and string — Yukihiro Matsumoto <matz@...> 2006/09/06

まつもと ゆきひろです

[#29512] Re: symbol and string — keiju@... (石塚圭樹) 2006/09/06

けいじゅ@いしつかです.

[#29529] Re: symbol and string — SASADA Koichi <ko1@...> 2006/09/08

 ささだです。

[#29530] Re: symbol and string — Yukihiro Matsumoto <matz@...> 2006/09/08

まつもと ゆきひろです

[ruby-dev:29520] Re: nil.to_s

From: Yukihiro Matsumoto <matz@...>
Date: 2006-09-07 16:01:06 UTC
List: ruby-dev #29520
まつもと ゆきひろです

とりあえずここに付けます。

In message "Re: [ruby-dev:29405] Re: nil.to_s"
    on Sat, 2 Sep 2006 12:10:06 +0900, "NARUSE, Yui" <naruse@airemix.com> writes:

|まとめると、
|* nil はエラーを示す値
|* エラーで止めたいなら "nil" か例外
|* エラーでも進みたければ零元
|* to_s 系はエラーでも進みたい
|* to_str 系は止めたいかな
|* String() 系はどちらだろう # to_s 系か to_str 系かにあわせるべき

皆さんからたくさんの意見が聴けたのでありがたく思います。先週
の

  nil.to_s => "nil"

という変更以来、賛成、反対両方からいろいろな意見をいただきま
した(主に反対かな)。で、それらを踏まえていろいろ考えたのです
が、以下のようにしようと思います。

  * nil.to_sは""に戻す

    根拠
    (1) to_sはinspectとは違う。
    (2) あいかわらずnilは「なにでもない」存在であり、それ故
        にto_sがなにを返すのも自由だといまだに考えているが、
        ""以外のものを返すのであれば、零元とは決別するという
        ことであり、to_i, to_f, to_aなどを未定義にする必要が
        ある。それはそれで魅力的な気もするが、同時に茨の道で
        もある。
    (3) 1.9は互換性に気を使わないと宣言しているものの、こん
        な些細な点で大きな非互換性を導入することもないだろう。

  * String()などの「クラス名系変換メソッド」はnilに対して例
    外を出す。

    根拠
    (1) 伝統的に「クラス名系変換メソッド」は対応するto_xメソッ
        ドよりチェックが厳しいことになっており、エラー無視の
        方向に使われるnilからの変換は使われるべきでない

  * to_xに相当するメソッドを提供する数値クラスはnilに対して
    そのゼロを返すべき。その他のクラス(Rubyの根源的データ構
    造であるStringとArrayを除く)への変換メソッドはnilに定義
    されるべきではない。例: Rationalは数値でありto_rメソッド
    を持つので(ただし、この名前が本当によいのかは再検討が必
    要)、将来nil.to_rが定義される可能性が高い。あるいは、
    BigDecimalは数値クラスであるがto_xに相当するメソッドを持
    たないのでnilにメソッドは追加されない、など。

    根拠
    (1) 無制限かつ無秩序にnilにto_xメソッドが追加されること
        は避けたい
    (2) 数値にはゼロが明確に定義されていることが期待される。
    (3) to_xに相当するメソッドがなければ、nilに追加すること
        もない(当然)

あと、考えていることは

  * Array#to_sとHash#to_sは何を返すべきか

    Perl由来の今の挙動は嬉しいことがなにひとつない。
    Pythonのようにinspect(repr)のaliasにすべき(か)。

  * 現在特別扱いしている「puts nil」と「puts ary」はどう振る
    舞うべきか。

    例外を減らすならいずれも引数をto_sしたものを出力すべき。
    「目に優しいdump」はあきらめる(そんな重要じゃないし)。
    「puts ary」は「puts *ary」で代替。

  * 「print nil」と「printf "%s", nil」は?

    後者は「nil」を表示すべき(Cのprintfでも「(null)」が印字
    される)。前者は...うーん、やっぱり「nil」かなあ。

この辺はまだ未定です。
                                まつもと ゆきひろ /:|)

In This Thread