PerlerのRuby日記

Rubyとか

includeだけでincludeとextendする方法

読んでます。

メタプログラミングRuby

メタプログラミングRuby

その中でMerbを例に「クラス拡張ミックスイン」という技が載っていた。


簡単に言えば、モジュールをいつものようにincludeするだけで、クラスメソッド化もしてしまう方法である。


いやーほんとRubyって魔術っぽいですよね。


module Hoge
  def self.included(base)
    base.extend(self)
  end

  def hoge
    "hoge!!!!"
  end
end

class Fuga
  include Hoge
end

puts Fuga.new.hoge #=> "huge!!!!"
puts Fuga.hoge     #=> "huge!!!!"

モジュールがincludeされたときのフックメソッドをオーバライドして、

更に中でextendしてしまうという。