繁体   English   中英

在块中省略方法的参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM