[译]Scala Currying
2017-05-05 本文已影响16人
steanxy
方法可以定义多个参数列表。当调用方法时传递的参数列表少了,则将会产生一个函数,缺失的参数列表会作为这个函数的参数。
下面是一个示例:
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)