web-k.log

RubyやWebをメインに技術情報をのせていきます

Module#prepend

| Comments

Ruby 2.0.0の主な機能のうちのひとつ「Module#prepend」の挙動について。

prependは呼び出し元のクラス/モジュールの前にモジュールを置きます。 その呼ばれたモジュールの中で同じ名前を持つメソッドがあれば、それをラップします。 局所的なモンキーパッチを当てるような感じです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module Foo
  def foo
    p "before"
    super
    p "after"
  end
end

class Bar
  def foo
    p "bar"
  end
  prepend Foo
end

Bar.new.foo # "before", "bar", "after"

Comments