在課堂上實施

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]