我想知道Ruby是否有像Scala中那样的隐式块参数或通配符,可以绑定并用于进一步执行,如下所示:
my_collection.each { puts _ }
Run Code Online (Sandbox Code Playgroud)
要么
my_collection.each { puts }
Run Code Online (Sandbox Code Playgroud)
有一些类似于proc的符号,它从集合中调用每个元素的一些方法,如:array_of_strings.each &:downcase
,但我不想在循环中执行对象的方法,而是使用此对象作为参数执行一些函数:
my_collection.each { my_method(_) }
Run Code Online (Sandbox Code Playgroud)
代替:
my_collection.each { |f| my_method(f) }
Run Code Online (Sandbox Code Playgroud)
在Ruby中有没有办法做到这一点?
你应该能够做到:
my_collection.each &method(:my_method)
Run Code Online (Sandbox Code Playgroud)
method
是在Object类上定义的方法,返回类的实例Method
.Method
实例,与符号类似,定义to_proc
方法,因此可以与一元运算&
符一起使用.此运算符接受proc或任何对象定义to_proc
方法,并将其转换为块,然后将其传递给方法.所以,如果你有一个定义如下的方法:
def my_method(a,b)
puts "#{b}: #{a}"
end
Run Code Online (Sandbox Code Playgroud)
你可以写:
[1,2,3,4].each.with_index &:method(:my_method)
Run Code Online (Sandbox Code Playgroud)
哪个将翻译为:
[1,2,3,4].each.with_index do |a,b|
puts "#{b}: #{a}"
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1029 次 |
最近记录: |