【发布时间】:2015-10-30 06:24:23
【问题描述】:
在 Scala 中,为什么一个 curried 函数可以很容易地直接传递给其他函数,但是当将它分配给 val 时,还需要部分应用它与 _?例如,给定两个函数:
def curried(a: Int)(b: Int) = a + b
def test(a: Int, f: Int => Int) = f(a)
我可以轻松地将curried 传递给test:
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?
【问题讨论】:
-
在
val的情况下,如果您提供类型注释,则不需要公开的部分应用程序_。