gpt4 book ai didi

scala - 为什么 Scala 在分配给 val 时需要部分应用柯里化(Currying)函数?

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

在 Scala 中,为什么一个柯里化(Currying)函数可以很容易地直接传递给其他函数,但是当它分配给一个 val还需要使用 _ 部分应用它?例如,给定两个函数:

def curried(a: Int)(b: Int) = a + b
def test(a: Int, f: Int => Int) = f(a)

我可以轻松通过 curriedtest和:
test(5, curried(5))

一切都很幸福。但是,如果我只是调用 curried(5)我收到一个错误:
scala> curried(5)
<console>:9: error: missing arguments for method curried;
follow this method with `_' if you want to treat it as a partially applied function
curried(5)

但是,如果我将调用更改为包含类型信息,它将起作用:
val 'curried: Int => Int = curried(5)

谁能解释不一致背后的原因,Scala编译器肯定可以推断出该函数是 Int => Int给定原始方法的类型定义?

最佳答案

问题不在于推断类型,问题在于推断您的意图。是你犯了错误,还是你故意对函数进行了柯里化(Currying)?

唉,结尾的下划线语法是正式语法,省略它是语法糖。

关于scala - 为什么 Scala 在分配给 val 时需要部分应用柯里化(Currying)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304523/

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