Ruby:从模块中返回多个方法作为procs的更好方法

Dre*_*ker 6 ruby

从模块返回类似proc的方法非常容易:

module Foo
  def self.bar
    # Method implementation
  end

  def self.baz
    # Method implementation
  end

  def self.qux
    # Method implemenatation
  end

  def self.zoo
    # Method implementation
  end
end

Foo.method(:bar) # Returns a proc object
Run Code Online (Sandbox Code Playgroud)

但是如果我想从同一个模块返回多个(但不是全部)方法呢?一种方法是:[:bar,:baz].inject([]) {|memo,i| memo << Foo.method(i)}

是否有更好,更灵活的方式来做同样的事情?

Amr*_*man 2

您始终可以使用猴子修补来使其看起来像您想要的那样:

class Object
  def get_methods(*methods)
    methods.map { |m| method(m) } 
  end
end


module Foo
  def self.bar
    # Method implementation
  end

  def self.baz
    # Method implementation
  end
end

Foo.get_methods(:foo, :baz)
Run Code Online (Sandbox Code Playgroud)