znzの日記

2007-01-12

[] extend

tDiary-develでextendを使えばいいと言うだけで、extendについての説明をしなかったので、ERB::Util.hをクラスメソッドで使いたい場合のextendについての説明です。

module Hoge
  def hoge
    puts "hoge"
  end
end

というmoduleがあったとして、obj.extend Hogeというのは

def obj.hoge
  puts "hoge"
end

と同じようなもの。

class Foo
end
foo = Foo.new
foo.extend Hoge

なら

def obj.hoge
  puts "hoge"
end

相当。

class Bar
  extend Hoge
end

ならextend Hogeの部分はself.extend HogeBar.extend Hogeと同じなので

class Bar
  def self.hoge
    puts "hoge"
  end
end

相当になる。