From: Yukihiro Matsumoto Date: 2010-02-26T01:09:18+09:00 Subject: [ruby-dev:40488] Re: バグ? ブロック引数で to_ary が呼ばれる必要のない場面で呼ばれる まつもと ゆきひろです 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 | |やっぱそういうものです? あれ? そうだっけ?