斯卡拉 |部分应用函数
部分应用函数是未应用于所述函数定义的所有参数的函数,即,在调用函数时,我们可以提供一些参数,并在需要时提供左参数。我们调用一个函数,我们可以在其中传递更少的参数,并且当我们传递更少的参数时,它不会抛出异常。这些未传递给函数的参数我们使用连字符(_)作为占位符。
一些重要的点:
- 部分应用函数有助于最小化接受许多参数的函数,而函数只接受一些参数。
- 它可以替换函数定义的任意数量的参数。
- 用户更容易使用这种方法。
句法:
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
在这里,折扣在参数中传递,成本价格部分留空,稍后可以在需要时传递,因此可以计算任意次数的折扣价格。
部分应用函数的更多示例:
- 即使没有应用于任何定义的参数,也可以获得部分应用的函数。
例子:// 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
- 部分应用函数可用于替换任意数量的参数。
例子:// 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
- 柯里化方法可用于部分应用函数,将具有多个参数的函数传输到多个函数中,其中每个函数只接受一个参数。
例子:// 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
在这里,柯里化方法将给定函数分解为两个函数,其中每个函数接受一个参数,因此,您需要为每个函数传递一个值并获得所需的输出。