2011-06-20 65 views
0

我看到了如何動態地將方法添加到Ruby中的實例def [instance].[methodname]; [...]; end在Ruby中動態添加(預定義的)實例方法

但是,我有興趣將另一個位置存在的方法附加到給定實例。例如

def my_meth 
    puts self.foo 
end 

class MyCls 
    attr_accessor :foo 
end 

my_obj = MyCls.new 
my_obj.my_meth 

我怎麼能簡單地連接到my_meth這樣my_obj在上述代碼的最後一行調用該方法將工作?

回答

5

您可以使用includeextend爲您的班級添加模塊,例如。 extend

module Foo 
    def my_meth 
    puts self.foo 
    end 
end 

class MyCls 
    attr_accessor :foo 
end 

my_obj = MyCls.new 
my_obj.extend(Foo) 
my_obj.foo = "hello" 
my_obj.my_meth 

除非你有一個需要混合,在一個模塊上飛這樣它通常更好地include您的模塊,像這樣:

class MyCls 
    include Foo 
    attr_accessor :foo 
end