[英]Omitting an argument for a method in a block
我想知道,是否有可能在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
如果您在SLS(第6.26.5节)中查找隐式η-expansion的规则,则应该很明显它非常依赖于静态类型信息,因此可能无法在Ruby中工作。
但是,您可以通过反射显式获取Method
对象。 Method
对象对to_proc
做出响应,因此像对to_proc
做出响应的任何对象一样,可以使用一元前缀&
运算符将它们作为块传递:
some_array.each(&method(:puts))
不幸的是,并非如此。 您可以发送要在每个对象上调用的方法名称,例如:
some_array.each &:print_myself
等效于:
some_array.each {|x| x.print_myself}
但是我不知道一种干净(内置的)方式来完成您所要的事情。 (编辑:@Jörg的答案可以做到这一点,尽管它并没有真正节省您的任何键入操作。Ruby中没有自动的部分函数应用程序)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.