为什么我不能重写
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)
?
答案 0 :(得分:9)
abc.foldRight(0)(math.max(_.length, _))
将扩展为类似abc.foldRight(0)(y => math.max(x => x.length, y))
的内容。占位符语法在最近的一对右括号中展开,除非您只有下划线,在这种情况下,它将扩展到最近的括号对之外。
您可以使用没有此缺点的abc.foldRight(0)(_.length max _)
。