Module, Mixin
モジュールとはメソッド、クラス、定数をグループ化する方法の一つ。モジュールをincludeすることでMixinが実現できる。mixinされたモジュールはスーパークラスとして動作する。
class Person include Comparable attr_reader :name def initialize(name) @name = name end def to_s "#{@name}" end def <=>(other) self.name <=> other.name end end p1 = Person.new("Matz") p2 = Person.new("Guido") p3 = Person.new("Larry") if p1 > p2 puts "#{p1.name}'s name > #{p2.name}'s name" end puts [p1, p2 p3].sort
Rubyのコレクションクラスの機能も自分のクラスにEnumerableをmixinし、eachイテレータを書くことで実現できる。
class EnumDemo include Enumerable def initialize(string) @string = string end def each @string.scan(/[あいうえお]/) do |vowel| yield vowel end end end em = EnumDemo.new("あれれれれおいおい") em.inject(:+) # => あおいおい