在课堂上实施

Enumerable 是 Ruby 中最受欢迎的模块。它的目的是为你提供像 mapselectreduce 等可迭代的方法。使用 Enumerable 的类包括 ArrayHashRange。要使用它,你必须 include Enumerable 并实现 each

class NaturalNumbers
  include Enumerable

  def initialize(upper_limit)
    @upper_limit = upper_limit
  end

  def each(&block)
    0.upto(@upper_limit).each(&block)
  end
end

n = NaturalNumbers.new(6)

n.reduce(:+)                   # => 21
n.select(&:even?)              # => [0, 2, 4, 6]
n.map { |number| number ** 2 } # => [0, 1, 4, 9, 16, 25, 36]