📜  斯卡拉 |部分应用函数

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

斯卡拉 |部分应用函数

部分应用函数是未应用于所述函数定义的所有参数的函数,即,在调用函数时,我们可以提供一些参数,并在需要时提供左参数。我们调用一个函数,我们可以在其中传递更少的参数,并且当我们传递更少的参数时,它不会抛出异常。这些未传递给函数的参数我们使用连字符(_)作为占位符。
一些重要的点:

  • 部分应用函数有助于最小化接受许多参数的函数,而函数只接受一些参数。
  • 它可以替换函数定义的任意数量的参数。
  • 用户更容易使用这种方法。

句法:

val multiply = (a: Int, b: Int, c: Int) => a * b * c

// less arguments passed
val f = multiply(1, 2, _: Int)

正如我们在上面的语法中看到的,我们定义了一个普通函数multiply,它有三个参数,我们传递的参数更少(两个)。我们可以看到它没有抛出异常,即部分应用函数。
例子:

// Scala program of Partially
// applied functions
  
// Creating object
object Applied
{
  
    // Main method
    def main(args: Array[String])
    {
  
        // Creating a Partially applied
        // function
        def Book(discount: Double, costprice: Double) 
        : Double =
        {
  
            (1 - discount/100) * costprice
  
        }
  
        // Applying only one argument
        val discountedPrice = Book(25, _: Double)
  
        // Displays discounted price
        // of the book
        println(discountedPrice(400))
  
    }
}
输出:
300.0

在这里,折扣在参数中传递,成本价格部分留空,稍后可以在需要时传递,因此可以计算任意次数的折扣价格。

部分应用函数的更多示例:

  1. 即使没有应用于任何定义的参数,也可以获得部分应用的函数。
    例子:
    // Scala program of Partially
    // applied functions
      
    // Creating object
    object Applied
    {
      
        // Main method
        def main(args: Array[String])
        {
      
            // Creating a Partially applied
            // function
            def Mul(x: Double, y: Double)
            : Double =
            {
                x * y
            }
      
            // Not applying any argument
            val r = Mul _
      
            // Displays Multiplication
            println(r(9, 8))
        }
    }
    
    输出:
    72.0
    
  2. 部分应用函数可用于替换任意数量的参数。
    例子:
    // Scala program of Partially
    // applied functions
      
    // Creating object
    object Applied
    {
      
        // Main method
        def main(args: Array[String])
        {
      
            // Creating a Partially applied
            // function
            def Mul(x: Double, y: Double, z: Double)
            : Double =
            {
                x * y * z
            }
      
            // applying some arguments
            val r = Mul(7, 8, _ : Double)
      
            // Displays Multiplication
            println(r(10))
        }
    }
    
    输出:
    560.0
    
  3. 柯里化方法可用于部分应用函数,将具有多个参数的函数传输到多个函数中,其中每个函数只接受一个参数。
    例子:
    // Scala program of Partially
    // applied functions using
    // Currying approach
      
    // Creating object
    object curr
    {
      
        // Main method
        def main(args: Array[String])
        {
      
            // Creating a Partially applied
            // function
            def div(x: Double, y: Double) 
            : Double =
            {
                x / y
            }
      
            // applying currying approach 
            val m = (div _).curried
      
            // Displays division
            println(m(72)(9))
        }
    }
    
    输出:
    8.0
    

    在这里,柯里化方法将给定函数分解为两个函数,其中每个函数接受一个参数,因此,您需要为每个函数传递一个值并获得所需的输出。