【戻る】 【進む】   目次        26. 継承とインクルード - モジュールのインクルード - Enumerable

Enumerable

Enumerableの定義
module Enumerable
  def collect
    ary = []
    each {|x| ary.push yield(x)}
    ary
  end
  
  def to_a
    ary = []
    each {|x| ary.push x}
    ary
  end
  
  def find_all
    ary = []
    each {|x| ary.push(x) if yield(x)}
    ary
  end
  
  def find
    r = nil
    each {|x| yield(x) && (r = x; break)}
    r
  end
  
  def grep(*r)
    ary = []
    unless block_given?
      each {|x|
	if r[0] === x
	  ary.push x
	end
      }
    else
      each {|x|
	if r.empty? or r[0] === x
	  ary.push yield(x)
	end
      }
    end
    ary
  end
  
  def each_with_index
    i = 0
    each {|x| yield(x, i); i += 1}
  end
end
enumerable0.rb
Enumerableの利用例
class Foo
  include Enumerable
  def each
    yield 11
    yield 5
    yield -7
  end
end

foo = Foo.new
foo.each do |x|
  puts x # 11, 5, -7
end

p foo.collect{|x| x ** 2}
  #=> [121, 25, 49]
p foo.sort
  #=> [-7, 5, 11]
p foo.sort{|a, b| a**2 - b**2}
  #=>  [5, -7, 11]
collect0.rb

【戻る】 【進む】   目次        26. 継承とインクルード - モジュールのインクルード - Enumerable