インスタンス化されたオブジェクトにメソッドを追加する
概要
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