代码之家  ›  专栏  ›  技术社区  ›  Matchu

将实例方法发送到模块

  •  3
  • Matchu  · 技术社区  · 15 年前

    给定以下模块,

    module Foo
      def bar
        :baz
      end
    end
    
    def send_to_foo(method)
      # ...?
    end
    
    send_to_foo(:bar) # => :baz
    

    应该输入什么代码 send_to_foo 使最后一行按预期工作?( 森达托托福 显然不是我要如何实现这一点;它只是让我更清楚地知道我在寻找什么。)

    我期待 Foo.send(:bar) 一开始是有效的,但没有这样做是有意义的。 def self.bar ,但那不好玩。

    1 回复  |  直到 15 年前
        1
  •  2
  •   rampion    15 年前

    好吧,简单的方法是

    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