Scala 高阶函数

Scala 高阶函数,scala,functional-programming,Scala,Functional Programming,在使用Scala进行函数编程的过程中,我看到了两种形式的def声明。但我不知道它们之间的区别,也不知道它们的名字。我怎样才能得到更多的信息呢 宣言1 defsum(f:Int=>Int)(a:Int,b:Int):Int=??? 宣言2 def sum(f:Int=>Int,a:Int,b:Int):Int=???第一个称为curried语法 您可以部分应用该函数,然后返回一个新函数 scala> def sum(f: Int => Int)(a: Int, b: Int): Int

在使用Scala进行函数编程的过程中,我看到了两种形式的
def
声明。但我不知道它们之间的区别,也不知道它们的名字。我怎样才能得到更多的信息呢

宣言1

defsum(f:Int=>Int)(a:Int,b:Int):Int=???

宣言2


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

第一个称为curried语法

您可以部分应用该函数,然后返回一个新函数

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/108209958@474821de
第二个是uncarried语法,但即使在这种情况下,我们仍然可以部分应用该函数

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/1038002783@1a500561
当部分应用时,新函数再次返回

这两个声明之间没有区别,只是语法上的差别


第一种称为curried语法

您可以部分应用该函数,然后返回一个新函数

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/108209958@474821de
第二个是uncarried语法,但即使在这种情况下,我们仍然可以部分应用该函数

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/1038002783@1a500561
当部分应用时,新函数再次返回

这两个声明之间没有区别,只是语法上的差别