来自现有答案的Currying功能无效

时间:2015-03-11 16:12:25

标签: scala

我尝试运行以下代码:

val f: (a: Int) => (b: Int) => (c: Int) = a + b + c

在REPL和IntellijIDEA的thread中找到,但它显然无效。

来自REPL:

scala> val f: (a: Int) => (b: Int) => (c: Int) = a + b + c
<console>:1: error: ')' expected but ':' found.
       val f: (a: Int) => (b: Int) => (c: Int) = a + b + c
                ^

任何人都知道为什么?我的scala版本是2.10.1

谢谢

1 个答案:

答案 0 :(得分:3)

你写的就像你写的一样:

val a: 5 = 5

你想要的更像是

val f  = (a: Int) => (b: Int) => (c: Int) => a+b+c

进一步详细说明REPL将写入

f: Int => (Int => (Int => Int)) = <function1>

因为函数定义是右关联的,所以f的类型可以明确如下

f: Int => Int => Int => Int = (a: Int) => (b: Int) => (c: Int) => a+b+c

如果你明确给出这样的函数类型,编译器不需要有关a,b和c的信息,你可以简单地写一个=&gt; b =&gt; c =&gt;而不是a + b + c。