高级函数

在使用Scala进行函数式编程的过程中,我看到了两种形式的def声明。但我不知道它们之间的差异,也不知道它的名称。我如何获得更多关于此的信息?高级函数

宣言1

def sum(f: Int => Int)(a: Int, b: Int): Int = ???

宣言2

def sum(f: Int => Int, a: Int, b: Int): Int = ???

回答:

第一个被称为咖喱语法。

您可以部分应用该功能,然后返回一个新功能。

scala> def sum(f: Int => Int)(a: Int, b: Int): Int = f(a) + f(b) 

sum: (f: Int => Int)(a: Int, b: Int)Int

scala> sum({x: Int => x + 1}) _

res10: (Int, Int) => Int = $$Lambda$1115/1[email protected]21de

第二个是uncurried语法,但即使在这种情况下,我们仍然可以部分地应用该函数。

scala> def sum(f: Int => Int, a: Int, b: Int): Int = f(a) + f(b) 

sum: (f: Int => Int, a: Int, b: Int)Int

scala> sum({x: Int => x + 1}, _: Int, _: Int)

res11: (Int, Int) => Int = $$Lambda$1116/[email protected]

再次部分应用时返回新函数。

上面两个声明没有区别,它只是语法糖。

以上是 高级函数 的全部内容, 来源链接: utcz.com/qa/257480.html

回到顶部