我看到了如何使用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