使用示例在 Scala 中对函数进行柯里化
Scala 中的柯里化只是一种技术或转换函数的过程。这个函数接受多个参数到一个接受单个参数的函数中。它广泛应用于多种功能语言。句法
def function name(argument1, argument2) = operation
让我们通过一个简单的例子来理解,
例子:
// Scala program add two numbers
// using currying Function
object Curry
{
// Define currying function
def add(x: Int, y: Int) = x + y;
def main(args: Array[String])
{
println(add(20, 19));
}
}
输出:
39
在这里,我们定义了add函数,它接受两个参数(x 和 y),该函数简单地将 x 和 y 添加并给我们结果,在 main函数中调用它。
另一种声明柯里函数的方法
假设,我们必须将这个 add函数函数为 Curried函数,即将两个(多个)参数的函数转换为一个(单个)参数的函数。句法
def function name(argument1) = (argument2) => operation
例子
// Scala program add two numbers
// using Currying function
object Curry
{
// transforming the function that
// takes two(multiple) arguments into
// a function that takes one(single) argument.
def add2(a: Int) = (b: Int) => a + b;
// Main method
def main(args: Array[String])
{
println(add2(20)(19));
}
}
输出:
39
在这里,我们定义了 add2函数,它只接受一个参数a ,我们将返回第二个函数,该函数将具有 add2 的值。第二个函数也将接受一个参数,比如说b ,这个函数在 main 中调用时,接受两个括号(add2()()),其中第一个括号是函数add2,第二个括号是第二个函数。它将返回两个数字的加法,即a+b 。因此,我们对 add函数进行了柯里化,这意味着我们将接受两个参数的函数转换为接受一个参数的函数,并且函数本身返回结果。
我们还有另一种使用这个 Curried函数的方法,那就是Partially Applied 函数 。所以,让我们举一个简单的例子来理解。我们在主函数中定义了一个变量 sum
例子
// Scala program add two numbers
// using Currying function
object Curry
{
def add2(a: Int) = (b: Int) => a + b;
// Main function
def main(args: Array[String])
{
// Partially Applied function.
val sum = add2(29);
println(sum(5));
}
}
输出:
34
在这里,在将函数分配给值时,只传递了一个参数。第二个参数与值一起传递,并添加这些参数并打印结果。
此外,另一种编写柯里函数的方法(语法)。句法
def function name(argument1) (argument2) = operation
例子
// Scala program add two numbers
// using Currying function
object Curry
{
// Curring function declaration
def add2(a: Int) (b: Int) = a + b;
def main(args: Array[String])
{
println(add2(29)(5));
}
}
输出:
34
对于这种语法,部分应用函数也会发生变化。
例子
// Scala program add two numbers
// using Currying function
object Curry
{
// Curring function declaration
def add2(a: Int) (b: Int) = a + b;
def main(args: Array[String])
{
// Partially Applied function.
val sum=add2(29)_;
println(sum(5));
}
}
输出:
34
这里,在调用函数add2 之后只添加了“_”作为 sum 的值。