5.6 传递变参

如果方法接收参数,就需要指定参数的名字及其类型:

  1. def divide(op1: Double, op2: Double) = op1/op2

我们可以编写接收可变数目实参(vararg)的方法。不过,只有末尾的参数可以接收可变数目的实参。在类型信息之后使用特殊符号(*),就像下面的max()方法:

  1. def max(values: Int*) = values.foldLeft(values(0)) { Math.max }

Scala把变参(上面例子中的values)当作数组,可以对其循环。只要传入任意数目的实参,即可用可变数目的实参调用这个方法:

  1. println(max(2, 5, 3, 7, 1, 6))

虽然我们可以传入离散的实参,却不能传数组。如果定义了这样的一个数组:

  1. val numbers = Array(2, 5, 3, 7, 1, 6)

下面代码就会报错:

  1. println(max(numbers)) // type mismatch error

如果想用数组中的值做可变实参,可以将数组展开成离散值——用下面这一系列符号:_*可以做到这一点:

  1. println(max(numbers: _*))