ごとけんです

In message "[ruby-dev:8744] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num)"
    on 99/12/28, Yukihiro Matsumoto <matz / netlab.co.jp> writes:
>これですが、実は yield側からはブロックパラメータの数が分から
>ないので、現在の仕様のままでは少々手を入れるだけではこれは実
>現できません。

arity というのをむかしおねだりして実装してもらったような。

  def a; proc.arity; end
  p a{|i,j,k|} #=> 3

これをつかって、

  class Array
    def myeach(&block)
      arity = block.arity
      if arity > 0
	arg, i = [], 0
	(size/arity).times{|i|
	  arg = self[arity*i, arity]
	  yield(*arg)
	}
	(rest = size%arity) > 0 and yield(*arg[i, rest]) 
      else
	each(&block)
      end
    end
  end

  array = ['a1','b1','c1','a2','b2','c2']
  array.myeach{|a,b,c| puts [a,b,c].join("#")}

-- gotoken