まつもと ゆきひろです

In message "Re: [ruby-dev:40482] Re: バグ? ブロック引数で to_ary が呼ばれる必要のない場面で呼ばれる"
    on Thu, 25 Feb 2010 00:55:49 +0900, keiju / ishitsuka.com (石塚圭樹) writes:

|元のスクリプトの 75行目あたりでの処理
|  
|  @c.d.each_export_by(@c.a, self) do |export, opts={}|
|
|を例外なく処理したいわけです.
|
|
|>で、ですね。この議論の後、この部分の挙動は
|>
|>  * NoMethodErrorが発生し、
|>  * かつ、呼び出したオブジェクトが、元となったメソッドに
|>    respond_to?しない
|
|2番目が良くわからなかったのですが, この場合で言えば, 上記の式で
|
|  export.respond_to?(:to_ary)
|
|がfalseになるってことです?

そういうことですね。

|たしかにその手もありますが, これだと, メソッド呼び出しの度に :to_aryの
|チェックが入るのでできれば避けたくて, to_aryのみの対応で済まないものか
|と...

えーと、気にしているのがコストだったら、それがボトルネックで
あることが明らかになってからでも遅くないと思いますが。

|to_aryを定義しておいて, さらに, E#respond_to?を以下のように定義しても
|NGなんですが...
|
|class E
|  def respond_to?(method)
|    if method == :to_ary
|      false
|    else
|      super
|    end
|  end
|end
|
|やっぱそういうものです? 

あれ? そうだっけ?