在以下定义中,我可以使用{}
而不是()
来表示curried函数,但不能用于常规函数。为什么呢?
//curried
scala> def add(i:Int)(j:Int) = {i+j}
add: (i: Int)(j: Int)Int
scala> add(1)(2)
res19: Int = 3
//{} works
scala> add(1){2}
res20: Int = 3
//{} works again
scala> add{1}{2}
res21: Int = 3
//non curried
scala> def add(i:Int,j:Int) = {i+j}
add: (i: Int, j: Int)Int
//use of {} creates error
scala> add{1,2}
<console>:1: error: ';' expected but ',' found.
add{1,2}
^
答案 0 :(得分:4)
{}
代码块,代码块中的最后一个值是返回值。
add(1){2}
表示第二个代码块返回值2 作为第二个参数
add{1}{2}
表示:第一个代码块返回1
作为参数,第二个代码块返回2
作为第二个参数
因此add{1,2}
没有任何意义,这不是正确的语法。