From: matz@... (Yukihiro Matsumoto) Date: 1998-04-08T15:13:09+09:00 Subject: [ruby-list:7368] Re: Q: jcode.rb tr(String + nil) まつもと ゆきひろです 少々ruby-devっぽい話題ですが,このままruby-listで. In message "[ruby-list:7366] Re: Q: jcode.rb tr(String + nil)" on 98/04/08, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |>String#+とString#concatは「nilを受け付けるようにしようかなあ」 |>と思い始めてます. | |そうですね. そのぐらいはいいですかね... Array#+/Array#concatでは許さ |れていますしね. Array#+やArray#concatは def +(obj) unless obj.kind_of? Array return self + obj.to_a end ... end のようになってて,nil.to_aが[]を返すようになっている結果なの でちょっと違うんですが. |そうすると, nil == nil | false | [] | "" | 0 ってイメージになるのかな? nil.to_i => 0 nil.to_s => "" nil.to_a => [] なのは確かですけど.どこででもそのように使って良いかっていう とそうでもないと思います.実際,たとえばnil -> 0の変換は現状 では暗黙には行われませんから. |今は, 論理演算(false) と +([],"",0), concat([],"")だけなのかな? 前述のようにArray#+とArray#concatは別とすると,現状では二項 演算子(または1引数のメソッド)で右辺のnilを特別扱いしているも のはないはずです.いっそのこと,nilからの暗黙の変換は一切行 わない方が良いのかも知れません.String#+とかも含めて. # さっきと言ってること違うんですけど |どうせなら, | | nil.concat []or"" | 1 + nil | |も許します? nil.concatっていうのはあんまり意味無いんではないでしょうか. だってconcatって「レシーバに破壊的に追加」って意味ですけど, nilには「追加」は出来ませんよね. 1+nilってのは今実装してみたんですけど,いろいろ考えるに必要 以上の暗黙の変換はバグの発見を遅らせるだけのように思うので, これも止めとこうと思います. となると後は nil + x でxが整数,実数,文字列,配列の時はxを返す,という仕様はどう なのか,ってことだけが残るんですが,これはこのままにしとこう と思います. # 実数や配列は外しても良いかも. まつもと ゆきひろ /:|)