将实例方法发送到模块

时间:2010-04-18 00:42:08

标签: ruby module send

给出以下模块,

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,那就好了。但这没什么好玩的。

1 个答案:

答案 0 :(得分:2)

好吧,简单的方法就是

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