首页 > 解决方案 > 不同的咖喱方法

问题描述

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

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

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

我想知道这两种方法有什么区别

标签: scalacurrying

解决方案


柯里化函数是可以像这样应用的函数

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

推荐阅读