下面提到的方法之间有什么区别?
我在scala中搜索了currying,并获得了currying的这两种语法。
def add1(x:Int)(y:Int) = {x+y}
def add2(x:Int) = (y:Int) => {x+y}
我想知道两种方法之间的区别
f(1)(2)(3)...(n)
也就是说,我们一次可以应用一个参数。让我们尝试一次将一个参数应用于您的方法,看看会发生什么
add1(1) // error add2(1) // ok
因此尽管我们可以写,但我们仍然无法完全使用add1
来做到这一点
add1(1)(2) // res0: Int = 3 add2(1)(2) // res1: Int = 3
但是像这样显式调用eta扩展
val f1 = add1 _ // f1: Int => (Int => Int) = <function> val f2 = add2 _ // f2: Int => (Int => Int) = <function>
我们看到我们得到了等效的咖喱函数,因此
f1(1) // ok f2(1) // ok