Techioz Blog

インスタンス化されたオブジェクトにメソッドを追加する

概要

obj = SomeObject.new

def obj.new_method
  "do some things"
end

puts obj.new_method
> "do some things"

これは正常に動作します。ただし、既存のメソッド内で同じことを行う必要があります。

def some_random_method
  def obj.new_method
    "do some things"
  end
end

こちらも問題なく動作しますが、メソッド内にメソッドがあるのはかなりひどいようです。問題は、そのようなメソッドを追加する別の方法はあるのかということです。

解決策

Ruby 1.9 以降では、次のように、define_singleton_method を使用してこれを行うより良い方法があります。

obj = SomeObject.new

obj.define_singleton_method(:new_method) do
  "do some things"
end