Scala 部分应用的函数
部分应用函数 是指不应用于所述函数定义的所有参数的函数,也就是说,在调用一个函数时,我们可以提供一些参数,在需要时再提供其余的参数。 我们在调用一个函数时,可以在其中传递较少的参数,当我们传递较少的参数时,就不会产生异常。 一些要点 。
- 部分应用函数有助于将一个接受许多参数的函数最小化为一个只接受一些参数的函数。
- 它可以取代一个函数所定义的任何数量的参数。
- 对用户来说,利用这种方法比较容易。
语法
val multiply = (a: Int, b: Int, c: Int) => a * b * c
// less arguments passed
val f = multiply(1, 2, _: Int)
正如我们所看到的,在上面的语法中,我们定义了一个正常的函数乘法,它有三个参数,我们传递了较少的参数(两个),我们可以看到它没有抛出一个异常,这是部分应用的函数,
例如 。
// 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
这里, 折扣 是在参数中传递的,而costprice部分是空的,可以在以后需要的时候传递,所以,折扣价格可以被计算任何次数。 部分应用函数的更多例子 。
- 一个部分应用的函数即使不应用于定义的任何参数,也可以得到。
例如
// 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
- 在部分应用函数中可以利用Currying方法,将一个有多个参数的函数传送到多个函数中,其中每个函数只接受一个参数。
例如
// 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
- 在这里,currying方法将给定的函数分成两个函数,每个函数需要一个参数,因此,你需要为每个函数传递一个值,并获得所需的输出。
极客教程