方法可以定义多个参数列表。当调用方法时传递的参数列表少了,则将会产生一个函数,缺失的参数列表会作为这个函数的参数。 下面是一个示例:
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)