在 Ruby 中动态添加(预定义)实例方法

发布于 2024-11-16 11:13:12 字数 341 浏览 4 评论 0原文

我了解了如何使用 def [instance].[methodname]; 动态地将方法添加到 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 以便上述代码最后一行中的方法调用能够工作?

I see how to dynamically add a method to an instance in Ruby with def [instance].[methodname]; [...]; end.

However, I'm interested in attaching a method that exists in another location to a given instance. e.g.

def my_meth
  puts self.foo
end

class MyCls
  attr_accessor :foo
end

my_obj = MyCls.new
my_obj.my_meth

How could I simply attach my_meth to my_obj so that the method call in the final line of the foregoing code would work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小梨窩很甜 2024-11-23 11:13:12

您可以使用 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

You could use include or extend to add a module to your class, eg. 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

Unless you have a need to mix-in a module on the fly like this it's generally better to include your module like so:

class MyCls
   include Foo
   attr_accessor :foo
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文