我想知道Ruby是否像Scala中那样具有隐式块参数或通配符,可以绑定并用于进一步执行,如下所示:
my_collection.each { puts _ }
或
my_collection.each { puts }
像proc这样的符号会从集合中调用每个元素的一些方法,如:array_of_strings.each &:downcase
,但我不想在循环中执行对象的方法,但是用这个对象作为参数执行一些函数:
my_collection.each { my_method(_) }
而不是:
my_collection.each { |f| my_method(f) }
有没有办法在Ruby中做到这一点?
答案 0 :(得分:7)
您应该能够:
my_collection.each &method(:my_method)
method
是在Object类上定义的方法,返回Method
类的实例。 Method
实例与符号类似,定义了to_proc
方法,因此可以与一元&
运算符一起使用。此运算符获取定义to_proc
方法的proc或任何对象,并将其转换为块,然后将其传递给方法。因此,如果您有一个定义如下的方法:
def my_method(a,b)
puts "#{b}: #{a}"
end
你可以写:
[1,2,3,4].each.with_index &:method(:my_method)
将转换为:
[1,2,3,4].each.with_index do |a,b|
puts "#{b}: #{a}"
end