1

我看到了如何使用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_methmy_obj上述代码的最后一行中的方法调用才能工作?

4

1 回答 1

6

您可以使用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
于 2011-06-20T19:27:59.827 回答