山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

プロを目指す人のためのRuby入門 その15

第8章 モジュールを理解する

prepend

prepend でモジュールをミックスインしたとき、同名メソッドの呼び出しはミックスインしたクラスよりも先にモジュールのメソッドが呼ばれます。

module A
  def to_s
    'A'
  end
end

class B
  prepend A

  def to_s
    'B'
  end
end

b = B.new
p b.to_s # A

refinements

refinements を使って範囲を限定してメソッドのオーバーライドやメソッドの追加をすることができます。refinements を有効にするには using を使います。

class User
  using StringConcatNumber

  def initialize(name)
    @name = name
  end

  def concat_number_name
    @name.concat_number
  end

  def name
    @name
  end
end

user = User.new('Ken')
p user.concat_number_name

感想

これで8章の終わりです。8章の内容は小規模なプログラムでは使う機会があまりないと思うので、必要な時に読み返そうと思います。Ruby に限らず、他の言語でも似たような機能があるので概念として覚えておくことは大事ですね。