Scala 部分应用了柯里化(Currying)函数

标签 scala currying

为什么我不能重写

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 _)它没有这个缺点。

关于Scala 部分应用了柯里化(Currying)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429216/

相关文章:

scala - reduceByKey 不是成员(member)

scala - 从 Spark 读取字符串数组

r - 为什么重复调用 lapply 后闭包中的变量值会丢失?

r - 如何将 Curry() 与 Vectorize() 结合起来?

haskell - 在haskell中无需递归即可进入范围

scala - Scala不是(没有)自动生成setter吗?

java - Akka:Java 中的 Flow 相当于什么

scala - 如何消除具有多个参数列表的案例类创建的歧义?

scala - Spark 、斯卡拉 : How to Subtract the values in the RDD pairs based on their key?

Typescript 柯里化(Currying)和异步函数