Scala之旅-柯里化

Scala之旅-柯里化

柯里化(currying)

方法可以定义多个参数列表。当调用方法传入的参数列表比实际定义的参数列表要少时,这将产生一个以缺失的参数列表作为其参数的函数。

如下是一个例子:

object CurryTest extends App {
  def filter(xs: List[Int], p: Int => Boolean): List[Int] =
    if (xs.isEmpty) xs
    else if (p(xs.head)) xs.head :: filter(xs.tail, p)
    else filter(xs.tail, p)
  def modN(n: Int)(x: Int) = ((x % n) == 0)
  val nums = List(1, 2, 3, 4, 5, 6, 7, 8)
  println(filter(nums, modN(2)))
  println(filter(nums, modN(3)))
}

注意:方法modN在两个filter调用中都只是被部分应用的;也就是说,只有它的第一个参数被实际使用了。modN(2)产生了一个类型为Int => Boolean的函数,因此它可以作为函数filter的第二个参数传入。

上述程序的输出如下:

List(2,4,6,8)
List(3,6)

参考资料

本文译自Tour Of Scala – Currying

上一篇:Scala之旅-嵌套方法

下一篇:Scala之旅-Case类

发表评论

电子邮件地址不会被公开。 必填项已用*标注