如何在ruby中将服务对象/模块作为参数传递

gay*_*vat 2 ruby metaprogramming ruby-on-rails-3

是否可以使用Module或对象作为ruby中每个方法的参数?

我需要类似的东西.

module PrintAny
  def call(text)
    puts text
   end
end

["any"].each PrintAny
Run Code Online (Sandbox Code Playgroud)

ndn*_*kov 7

几乎.您可以将模块转换为proc并以这种方式使用它:

module PrintAny
  def self.print(text)
    puts text
  end

  def self.to_proc
    method(:print).to_proc
  end
end

["any"].each &PrintAny # => prints "any"
Run Code Online (Sandbox Code Playgroud)

Enumerable#each要求你传递一个块,ampersand operator(&)通过首先调用to_proc该对象将一个对象转换为块.模块只是对象,因此如果它们有方法to_proc,这将起作用.