📜  使用示例在 Scala 中对函数进行柯里化

📅  最后修改于: 2022-05-13 01:55:17.441000             🧑  作者: Mango

使用示例在 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 的值。