为什么在某些情况下,我在传递参数时不能使用{}

时间:2017-09-20 08:24:41

标签: scala

在以下定义中,我可以使用{}而不是()来表示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}
     ^

1 个答案:

答案 0 :(得分:4)

{} 代码块代码块中的最后一个值是返回值

  • add(1){2}表示第二个代码块返回值2 作为第二个参数

  • add{1}{2}表示:第一个代码块返回1作为参数,第二个代码块返回2作为第二个参数

因此add{1,2}没有任何意义,这不是正确的语法。