Jel*_*Cat 0 ruby metaprogramming instance-methods
我看到如何动态地向Ruby中的实例添加方法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
Run Code Online (Sandbox Code Playgroud)
我怎么能简单地附加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
Run Code Online (Sandbox Code Playgroud)
除非您需要像这样混合使用模块,否则通常会对include您的模块更好:
class MyCls
include Foo
attr_accessor :foo
end
Run Code Online (Sandbox Code Playgroud)