以下兩個函數的類型有什麼區別?Scala中類似咖喱類型的區別
def add1: Int => Int => Int = a => b => a + b
def add2(a: Int)(b: Int) = a + b
根據他們的聲明,他們似乎有相同的類型。兩者都稱爲以相同的方式:
scala> add1(1)(2)
res2: Int = 3
scala> add2(1)(2)
res3: Int = 3
然而,在它們的類型的表觀差異:
scala> :t add1
Int => Int => Int
scala> :t add2
(a: Int)(b: Int)Int
此外,的add1
局部應用大於add2
吸塵器的位。
scala> add1(1)
res4: Int => Int = <function1>
scala> add2(1)(_)
res5: Int => Int = <function1>