将实例方法发送到模块

发布于 2024-08-28 22:46:03 字数 358 浏览 6 评论 0原文

给定以下模块,

module Foo
  def bar
    :baz
  end
end

def send_to_foo(method)
  # ...?
end

send_to_foo(:bar) # => :baz

send_to_foo 中应该包含哪些代码才能使最后一行按预期工作? (send_to_foo 显然不是我实现这个的方式;它只是让我更清楚我在寻找什么。)

我期望 Foo.send(:bar) 首先能够工作,但事实并非如此。如果该方法被定义为 def self.bar 就会出现这种情况,但这并不有趣。

Given the following module,

module Foo
  def bar
    :baz
  end
end

def send_to_foo(method)
  # ...?
end

send_to_foo(:bar) # => :baz

What code should go in send_to_foo to make the last line work as expected? (send_to_foo is obviously not how I would implement this; it just makes clearer what I'm looking for.)

I expected Foo.send(:bar) to work at first, but it makes sense that it doesn't. It would if the method were defined as def self.bar, but that's no fun.

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

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

发布评论

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

评论(1

耳钉梦 2024-09-04 22:46:03

好吧,最简单的方法就是

Foo.extend Foo # let Foo use the methods it contains as instance methods
def send_to_foo(method)
  Foo.send(method)
end

现在

irb> send_to_foo(:bar)
 #=> :baz

well, the easy way would be

Foo.extend Foo # let Foo use the methods it contains as instance methods
def send_to_foo(method)
  Foo.send(method)
end

So now

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