[译]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)))
}

注意:在两次filter调用中方法modN都只提供了部分参数列表(只提供了第一个参数列表)。modN(2)产生了一个类型为Int => Boolean的函数作为filter的第二个参数。

下面是程序的输出:

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

你可能感兴趣的:([译]Scala Currying)