scala - 为什么将点放在 foldLeft 中会导致编译错误?

标签 scala functional-programming

当我省略点符号来应用 foldLeft 时,谁能解释为什么我看到以下编译错误功能?(2.9.2版)

scala> val l = List(1, 2, 3)
res19: List[Int] = List(1 ,2 ,3)

scala> l foldLeft(1)(_ * _)
<console>:9: error: Int(1) does not take parameters
                    l foldLeft(1)(_ * _)
                                    ^


scala> l.foldLeft(1)(_ * _) 
res27: Int = 6

这不适用于其他高阶函数,例如 map这似乎并不关心我是否提供点。

我不认为它是关联性的,因为我不能只调用 foldLeft(1)

最佳答案

这是因为 foldLeft 是 curry 。除了使用点符号外,您还可以通过添加括号来解决此问题:

scala> (l foldLeft 1)(_ * _)
res3: Int = 6

哦 - 关于您关于无法调用 foldLeft(l) 的评论,你可以,但你需要像这样部分应用它:
scala> (l foldLeft 1) _
res3: ((Int, Int) => Int) => Int = <function1>

关于scala - 为什么将点放在 foldLeft 中会导致编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12904978/

相关文章:

java - 编写 Java-8-Functional-Interface

java - 如何更改函数引用的类型?

javascript - 在函数式编程中,为什么IO的join方法要运行unsafePerformIO两次?

java - 使用Mysql ClusterJ jar文件连接到NDB集群

testing - scalacheck、scalatest、specs——哪一个的进入阈值较低?

scala - 在scala varargs中强制单个参数

c++ - C/C++脚本优化

Scala - JSON 对象在字段类型上是多态的

scala - 建模 optional 参数的最佳方法

loops - 我如何从在 F# 中迭代​​ for 循环的函数返回值