Ruby の Enumerable#each_with_index を自前で実装してみた
Enumerable#each_with_index
の実装がどうなっているのか知りたかったんですが、どうやら C で書かれているようなので自分で Ruby を使った実装を書いてみた。
module Enumerable def each_with_index2 &block if block_given? index = 0 each { |it| block.call it, index index += 1 } else Enumerator.new { |y| index = 0 each { |it| y.send :<<, it, index index += 1 it } } end end end data = ["homu", "mami", "mado"] data.each_with_index { |it, i| puts "#{i} : #{it}" } # => 0 : homu # 1 : mami # 2 : mado data.each_with_index2.select { |it, i| i % 2 == 0 } # => [["homu", 0], ["mado", 2]]
結構雑に書いたんだけどこんな感じでよいのかな。
Enumerator
がいまいちなんなのかがよくわかってない…。