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

Scala 为什么在某些情况下,我在传递参数时不能使用{},scala,Scala,在下面的定义中,我可以使用{}而不是()来表示常用函数,但不能表示常规函数。为什么? //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

在下面的定义中,我可以使用
{}
而不是
()
来表示常用函数,但不能表示常规函数。为什么?

//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}
     ^
//咖喱
scala>defadd(i:Int)(j:Int)={i+j}
加:(i:Int)(j:Int)Int
scala>添加(1)(2)
res19:Int=3
//{}工程
scala>添加(1){2}
res20:Int=3
//{}又起作用了
scala>添加{1}{2}
res21:Int=3
//非咖喱
scala>defadd(i:Int,j:Int)={i+j}
加:(i:Int,j:Int)Int
//使用{}会产生错误
scala>添加{1,2}
:1:错误:';'应为,但未找到。
添加{1,2}
^

{}
代码块,代码块中的最后一个值是该函数的返回值

  • 对于
    add(1){2}
    意味着第二个代码块返回值2,作为第二个参数

  • 对于
    添加{1}{2}
    意味着:第一个代码块返回
    1
    作为参数,第二个代码块返回
    2
    作为第二个参数


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

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

  • 对于
    add(1){2}
    意味着第二个代码块返回值2,作为第二个参数

  • 对于
    添加{1}{2}
    意味着:第一个代码块返回
    1
    作为参数,第二个代码块返回
    2
    作为第二个参数

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

相关:相关: