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

如何在ruby中将服务对象/模块作为参数传递,ruby,ruby-on-rails-3,metaprogramming,Ruby,Ruby On Rails 3,Metaprogramming,在ruby中,是否可以使用模块或对象作为每个方法的参数 我需要像这样的东西 module PrintAny def call(text) puts text end end ["any"].each PrintAny 我不知道这什么时候能用在现实生活中,但是…: ['any'].each &PrintAny.instance_method(:call).bind(Object) #=> any 差不多。您可以将模块转换为proc,并以这种方式使用: modu

在ruby中,是否可以使用模块或对象作为每个方法的参数

我需要像这样的东西

module PrintAny
  def call(text)
    puts text
   end
end

["any"].each PrintAny

我不知道这什么时候能用在现实生活中,但是…:

['any'].each &PrintAny.instance_method(:call).bind(Object)
#=> any

差不多。您可以将模块转换为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"
Enumerable#每个
都需要传递一个块,通过首先调用对象上的
到_proc
,符号运算符(
&
)将对象转换为块。而模块只是对象,因此,如果它们有一个方法
来处理
,这将起作用