けいじゅ@いしつかです.

Rubyのバグのようなバグではないようななんですが...

ブロック引数にオプション引数を用いている場合で, 呼び出し側が:

	pre_bjob.each_export_by(input_filter, self) do |export, opts={}|

で, 呼び出される側が:

    def each_export_by(njob, mapper, &block)
#      block.call njob.export, :foo=>:bar
      block.call njob.export
    end

となっているとき, njob.export に to_ary がないと怒られてしまいます.

で, プログラム的にこの場面で to_ary が呼ばれる必要はないと思うのですが?
どうなんでしょう?

さらに, コメントのようにオプション引数にも実引数を渡すとこれは怒られな
くなります.

ただ, 簡単な再現スクリプトを作ってもこの現象は再現しませんので, 何か特
殊な条件が重なると発生するようです...

一応, どのリビジョンからこの現象が起るのかは調べてあって, 

  ruby 1.9.2dev (2009-10-29 trunk 25556) [i686-linux]

からになります. ChangeLogを見ると

	* array.c (rb_ary_to_ary): do not use #respond_to? to detect
	  to_ary.  Just call.  [ruby-core:23738]

こんなのがあって, 怪しいかなと思うのですが... 


__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju / ishitsuka.com <<---