まつもと ゆきひろです

In message "Re: [ruby-dev:40292] Re: Array#flatten の仕様変更?"
    on Tue, 2 Feb 2010 08:23:40 +0900, Hidetoshi NAGAI <nagai / ai.kyutech.ac.jp> writes:

|動かなくなっていたのは,flatten が呼ばれる配列の中に
|widget object が含まれている場合で,NameError で止まってました.

なるほど。NoMethodErrorしか捕捉していませんからね。

|# widget object では,知らないメソッドに対しては
|# 所有しない属性の参照/操作メソッドを呼ぼうとしていると解釈して,
|# 名前の響きで NameError を返すようにしていたのだと思います.
|
|変更については,widget object の method_missing において
|to_ary と to_str の場合は NoMethodError となるように変更しました.
|仕様変更にはなるのですが,この程度であれば,
|おっしゃる通り問題にはならないだろうと思いますので,
|ext/tk/lib/tk.rb の commit を済ませてしまいました.
|
|お騒がせしてすみませんでした.

いえ、それは構いませんが、to_strとto_aryに限らず、「知らない
メソッド」に対しては、常にNoMethodErrorを返すべきなんじゃない
でしょうか。通常のオブジェクトの振る舞いにあわせておいた方が
問題が少ないと思います。