2017-09-20 1 views
0

In den folgenden Definitionen kann ich {} anstelle von () für Curry-Funktionen, aber nicht für normale Funktionen verwenden. Warum?Warum kann ich {} bei der Übergabe von Argumenten nicht verwenden

//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

Relevant: https://stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-brace-and-parentheses-and-when –

Antwort

4

{} ist Codeblock, der letzte Wert in Codeblock ist es, den Rückgabewert davon.

  • für add(1){2} bedeutet den zweiten Codeblock Rückgabewert 2 als zweiten Parameter

  • für add{1}{2} bedeutet: erste Codeblock return 1 als Parameter, Rückkehr zweiten Codeblock 2 als zweiter Parameter

so für add{1,2} hat keine Bedeutung, das ist keine korrekte Syntax.

Verwandte Themen