Proc#call は引数を配列化して渡しているようですが、これを
Ruby のコード (proc { |args| ... }) で受けると多重代入によって
うまく展開されるので問題ないのですが、 C のコード (例えば
Enumerable#to_a 経由の enum.c#collect_all()) で受けると、
そのまま一つの配列として渡ってしまうようです。

    class X
      include Enumerable
      
      def each(&block)
        block.call(1)
        block.call(2)
        block.call(3)
      end
    end
    
    x = X.new
    p x.to_a	#=> [[1], [2], [3]]


これってちょっと困るんですが、何とかなりませんでしょうか?

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Freeze this moment a little bit longer, make each impression
  a little bit stronger..  Experience slips away -- Time stand still"