不同的固化方法

问题描述 投票:0回答:1

下面提到的方法之间有什么区别?

我在scala中搜索了currying,并获得了currying的这两种语法。

def add1(x:Int)(y:Int) = {x+y}
def add2(x:Int) = (y:Int) => {x+y}

我想知道两种方法之间的区别

scala currying
1个回答
0
投票
当前函数是可以像这样应用的函数

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

© www.soinside.com 2019 - 2024. All rights reserved.