我想知道,是否可以在Ruby中执行类似于Scala或其他语言的操作:
someCollection.foreach(x => println(x)) // a full version
someCollection.foreach(println) // a short version
在Ruby中,我可以做到:
some_array.each { |x| puts x }
那我怎么能这样做呢?
some_array.each { puts }
更新:
我不是在谈论特别是,它只是选择了它。可能有some_other_method
,其中包含一个参数。
some_array.map { some_other_method }
some_array.map(some_other_method) # ???
def some_other_method a
# ... doing something with a
end
答案 0 :(得分:3)
如果你在SLS(第6.26.5节)中查找隐式η-扩展的规则,那么它应该立即明显地依赖于静态类型信息,因此不可能在Ruby中工作。
你可以,但通过反射明确获取Method
个对象。 Method
个对象响应to_proc
,因此响应to_proc
的任何对象都可以像使用一元前缀&
运算符的块一样传递:
some_array.each(&method(:puts))
答案 1 :(得分:1)
some_array.each &:print_myself
相当于:
some_array.each {|x| x.print_myself}
但我不知道干净(读取:内置)方式来做你想要的。 (编辑:@Jörg的答案是这样做的,虽然它并没有真正为你节省任何打字。在Ruby中没有自动部分功能应用程序)