From: matz@... (Yukihiro Matsumoto) Date: 1999-12-28T12:14:33+09:00 Subject: [ruby-dev:8744] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) まつもと ゆきひろです In message "[ruby-dev:8742] [REQ] Array#each{|a,b,...|}, Array#shift/pop(num)" on 99/12/28, Kazunori NISHI writes: |規則的な要素の並びを持つ配列(例えば、n個おきに同じようなデータを持つ) |を扱おうとした時、どうもすっきりしたコードになりません。 | | array = ['a1','b1','c1','a2','b2','c2',...] ふうむ。 | [1] Array#each で、ブロック引数の個数分、要素を取れる。 | array.each {|a,b,c| ...} これですが、実は yield側からはブロックパラメータの数が分から ないので、現在の仕様のままでは少々手を入れるだけではこれは実 現できません。 | [2] Array#shift(num=1) で、先頭から引数で指定した数だけ取りだせる。 | while array.size > 0 | a,b,c = array.shift(3) | ... | end これって loop do a = array.shift b = array.shift c = array.shift break if array.size == 0 end で十分だったりする? |のどちらかができると、嬉しいな、みたいな。どうでしょうか? |yield の実装を理解してないので、実現可能性については考えてないです>[1]。 | | [3] Array#unflatten(num) | array.unflatten!(3) | a,b,c = array.shift | |は、他に用途がなさそうなので、却下。(でも書く奴) flattenと違ってunflattenは一意には決まりませんからねえ。 まつもと ゆきひろ /:|)