From: gotoken@... (GOTO Kentaro) Date: 1999-12-28T18:19:33+09:00 Subject: [ruby-dev:8749] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) ごとけんです In message "[ruby-dev:8744] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num)" on 99/12/28, Yukihiro Matsumoto 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