我看到了如何使用def [instance].[methodname]; [...]; end
.
但是,我有兴趣将存在于另一个位置的方法附加到给定实例。例如
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
上述代码的最后一行中的方法调用才能工作?
我看到了如何使用def [instance].[methodname]; [...]; end
.
但是,我有兴趣将存在于另一个位置的方法附加到给定实例。例如
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
上述代码的最后一行中的方法调用才能工作?
您可以使用include
或extend
将模块添加到您的课程中,例如。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