Enumerable#with_index ってのはどうだろう。 つーか前に誰かが案を出してたような気がするけどもう覚えてらんない。
module Enumerable def with_index( mid ) idx = -1 __send__(mid) do |*args| idx += 1 yield(idx, *args) end end end [2,4,6].with_index(:each) do |idx, i| puts "index #{idx}: #{i}" end {1=>5, 2=>10, 3=>15}.with_index(:each) do |idx, key, val| puts "index #{idx}: #{key} => #{val}" end
あぁ、each_with_index と引数の順番が違うし。 「*」を使うためにはやむを得ない。
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.