卜部でございます。

Yukihiro Matsumoto wrote:

>ふむ。nil以外ではエラーにしているわけですから、nilだけto_str
>を見るというのはあまり一貫性が無いと思います。いっそ、全部を
>to_strにする、というのもひとつの選択ですが、使い易さという点
>からは全部エラーにした方がよさそうに思います
>
># 変えるかな。
>  
>
それはそれで納得できる仕様です。ENV.[]=は

(1) 引数が文字列でなければもれなくエラーになる
(2) 引数にもれなくto_strを試す

のどちらかの挙動になるべき、と正式に提案したいです。Duck Typepっぽいので
(2)が好みです。

>|個人的には NilClass#to_str を定義することがままあります。
>
>それってどういう使い方なんですか。グローバルな変更は影響が大
>きすぎて扱い難くないですか?
>  
>
あるケース(実際にあった)では、nilとStringがごちゃまぜになった配列を返し
てくる某ライブラリを使ってるときに、nilとStringをポリモルフィックに使い
たいと思って定義しました。NilClass#to_strが空文字列を返してくれるだけ
で、かなり楽になれたと持っています。

このケースは明らかに一般的でない(仕様上のバグを回避しようとした汚いハッ
クともいえる)し、万人に勧められるものでもないと思いますが。