From: matz@... (Yukihiro Matsumoto) Date: 1999-12-28T12:14:32+09:00 Subject: [ruby-dev:8743] Re: [ruby-list:19945] Re: array + empty string まつもと ゆきひろです In message "[ruby-dev:8741] Re: [ruby-list:19945] Re: array + empty string" on 99/12/28, Wakou Aoyama writes: |> * Array#+に配列でないものを追加した場合の挙動は |> |> [] + obj.to_a |> |> で良いのか。あるいは [].dup.push(obj)が良いのか。 | |どちらでも無く、ごとけんさんと同じく、Array#+ に配列以外を渡した場合に |は例外で良いかと思います。過去に String 化症候群を無くしていったように。 まあ、それもひとつの考え方ですけどね。 ただ、String化症候群はなくなりましたが、いぜんとして to_str を使った「文字列でないものを文字列として扱う方法」は用意して いるわけですし、「配列でないものを配列として扱う」方法は用意 すべきだと思います。 まあ、それは to_a である必要はないし、Stringを配列化できる必 要もないというのはあるかもしれませんが。 で、考えるべき点は 配列(と配列と見なせるオブジェクト)以外のもの、たとえば文 字列を + の引数としたとき、どうすべきか (a) その要素を追加する (b) その要素のto_aと結合する(現状) (c) エラー どのようなオブジェクトを配列と見なせると考えるか (d) to_aのあるオブジェクト(つまりすべて; 現状) (e) 新メソッドの導入(たとえばto_ary) (f) 配列のみ ですね。 |> * "".to_a は現状のままeach_lineの結果そのままとするか、そ |> れとも [""] にするか(後者の方が直感的?) | |上のようにすると、 (後略) これは Array#+ とはある程度独立で、「"".to_a => [] は直感に 反しない?」っていう問いかけです。 これについてもどのようにするかについて (g) str.collect{|s|s}相当(現状) (h) str が$/を含まないとき [str]、含むときstr.collect{|s|s} (i) いつも [str] などが考えられます。 まつもと ゆきひろ /:|)