【发布时间】:2012-03-14 19:30:09
【问题描述】:
为什么我不能重写
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)?
【问题讨论】:
-
使用两个 _ 编译器如何知道用哪个参数替换 a,b 中的第一个 _ 和第二个参数?