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 と引数の順番が違うし。 「*」を使うためにはやむを得ない。