将方法添加到实例化对象

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 

使用Mixin。

 module AdditionalMethods def new_method "do some things" end end obj = SomeObject.new obj.extend(AdditionalMethods) puts obj.new_method > "do some things" 

你可以使用模块。

 module ObjSingletonMethods def new_method "do some things" end end obj.extend ObjSingletonMethods puts obj.new_method # => do some things 

现在,如果您需要向该对象添加更多方法,则只需在模块中实现方法即可完成。

只是有趣的一点要注意:

如果你已经去了:

 def my_method def my_other_method; end end 

然后, my_other_method实际上是在对象的CLASS上定义的,而my_method的接收者是一个实例。

但是,如果你去(像你一样):

 def my_method def self.my_other_method; end end 

然后my_other_method在实例的my_other_method上定义。

与你的问题没有直接的关系,但有点有趣;)