初めてのRuby − 2.3 Enumerableモジュール

Eumerableモジュール

each メソッドを定義して Enumrable を include すれば map などの一連のメソッドが使えるようになる。

class MyClass
  def initialize
    @data = [1, 5, 3, 2]
  end
  def each
    @data.each do |d|
      yield(d)
    end
  end
  include Enumerable # これで sort が使える
end

a = MyClass.new
a.each do |d| puts d end
p a.sort # include が無ければ method_missing

Enumerator クラス

each 以外のメソッドについて、Enumerableのメソッドを導出するプロキシクラス。
本の例では1行だけれど、生成されたクラスを変数に入れてみる。

a = [1,4,2,5,3]
enum = a.enum_for(:each_with_index)
p enum.map {|d, i| "[#{i}] = #{d}"}