gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:55:29 25 4
gpt4 key购买 nike

谁能解释为什么我在应用 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 被柯里化(Currying)了。除了使用点符号外,您还可以通过添加括号来解决此问题:

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/22896216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com