まつもと ゆきひろです

In message "[ruby-dev:8741] Re: [ruby-list:19945] Re: array + empty string"
    on 99/12/28, Wakou Aoyama <wakou / fsinet.or.jp> 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]

などが考えられます。
                                まつもと ゆきひろ /:|)