Scala的部分应用咖喱功能
问题描述:
为什么我不能改写Scala的部分应用咖喱功能
println(abc.foldRight(0)((a,b) => math.max(a.length,b)))
在
object Main {
def main(args : Array[String]) {
val abc = Array[String]("a","abc","erfgg","r")
println(abc.foldRight(0)((a,b) => math.max(a.length,b)))
}
}
到
println(abc.foldRight(0)(math.max(_.length,_)))
? scala
口译员收益率
/path/to/Main.scala:4: error: wrong number of parameters; expected = 2
println(abc.foldRight(0)(math.max(_.length,_)))
^
one error found
这对我来说不够好。是不是生成的lambda需要两个参数,其中一个被调用.length方法,如abc.map(_.length)
?
答
abc.foldRight(0)(math.max(_.length, _))
将展开为类似abc.foldRight(0)(y => math.max(x => x.length, y))
的东西。占位符语法扩展为最接近的一对右括号,除非只有下划线,否则它将扩展到最接近的一对括号之外。
您可以使用abc.foldRight(0)(_.length max _)
这不会受到这个缺点。
+0
谢谢!这个答案帮了我。 – 2012-02-24 11:08:41
使用两个_将如何知道哪个参数替换第一个_和第二个来自a,b? – 2012-02-24 10:57:53
Repsectivly,我认为 – 2012-02-24 11:08:08