是否可以将模块或对象用作ruby中每个方法的参数?
我需要类似的东西。
module PrintAny
def call(text)
puts text
end
end
["any"].each PrintAny
答案 0 :(得分: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"
Enumerable#each
要求您传递一个块,&符号运算符(&
)通过首先在该对象上调用to_proc
来将对象转换为块。模块只是对象,因此如果它们有方法to_proc
,这将起作用。
答案 1 :(得分:2)
我不知道什么时候可以在现实生活中使用它,但是......:
['any'].each &PrintAny.instance_method(:call).bind(Object)
#=> any