けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :7368 ] the message: "[ruby-list:7368] Re: Q: jcode.rb
tr(String + nil) ", on Apr/08 15:13(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>Array#+やArray#concatは
>のようになってて,nil.to_aが[]を返すようになっている結果なの
>でちょっと違うんですが.

なるほど. 昔のString#+と同じような実装ってことですね.

>  nil.to_i => 0
>  nil.to_s => ""
>  nil.to_a => []
>
>なのは確かですけど.どこででもそのように使って良いかっていう
>とそうでもないと思います.実際,たとえばnil -> 0の変換は現状
>では暗黙には行われませんから.

ruby-1.1b8_08でも,

  "a" * nil

は""になりますね. 今は, String以外はto_iしていますものね.

>|今は, 論理演算(false) と +([],"",0), concat([],"")だけなのかな?
>
>前述のようにArray#+とArray#concatは別とすると,現状では二項
>演算子(または1引数のメソッド)で右辺のnilを特別扱いしているも
>のはないはずです.いっそのこと,nilからの暗黙の変換は一切行
>わない方が良いのかも知れません.String#+とかも含めて.
># さっきと言ってること違うんですけど

私は, どっちかというとそちらに賛成です. ただ, 暗黙の変換を無意識に使っ
ていることが多いみたいなのが, ちょっと気にならないでもないですけど.

>nil.concatっていうのはあんまり意味無いんではないでしょうか.
>だってconcatって「レシーバに破壊的に追加」って意味ですけど,
>nilには「追加」は出来ませんよね.

うーん. nil == []だから, という意味だったんですけどね(^^;;;

# lispならOKなのに(^^;;;

>1+nilってのは今実装してみたんですけど,いろいろ考えるに必要
>以上の暗黙の変換はバグの発見を遅らせるだけのように思うので,
>これも止めとこうと思います.

ですね.

>となると後は
>
>  nil + x
>
>でxが整数,実数,文字列,配列の時はxを返す,という仕様はどう
>なのか,ってことだけが残るんですが,これはこのままにしとこう
>と思います.

(^^;;; 結構強情ですね.

まあ, この場合はnilがレシーバなので右辺に来るよりは良いとは思いますが...

># 実数や配列は外しても良いかも.

それも中途半端な...

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju / rational.com <<---