_J Blog

学んだ事のまとめやメモなどが中心です

特定のインスタンスのみにメソッドを追加する

作成したインスタンスのみメソッド追加するやり方がわからなくて、
試してみたのでメモ

下記ソースコードは Test クラスのインスタンスの a に対して、
特異メソッドを追加してみたサンプルです。

class Test
  def hoge
    p 'pp'
  end
end

a = Test.new
a.hoge
#=> 'pp'

# aの特異クラスに対して特異メソッドを定義する
class << a
  def hoge
    p 'hogehgoe'
  end
end

a.hoge
#=> 'hogehoge'

# 新規クラス作成して確認
b = Test.new

b.hoge
#=> 'pp'
# ほかのインスタンスに影響がない事がわかる

#以下のように書いても同じ
def a.hoge
  p 'hogehogehoge'
end

a.hoge
#=> 'hogehogehoge' 

Yuguiさんのこの記事がとても勉強になりました。
http://yugui.jp/articles/768

継承チェーンなどの、仕組みを分かって行けると楽しいですね。
もっと勉強します・・・