在Java中是可以使用變長參數的,如下面的方法:
public void check(String ... args){ for(String tmp : args){ System.out.println(tmp); } }
在scala中也可以使用變長參數。和java一樣,也是只有最后一個參數可以接收可變長度的參數。使用方式是在參數類型后使用特殊符號“*”,如下面的max()方法:
def max(values: Int*) = values.foldLeft(values(0)) {
Math.max
}
println(max(2, 5, 3, 7, 1, 6))
foldLeft是TraversableOnce類的一個方法。上面的代碼實現了從一個集合中獲取最大數值的方法。
代碼執行結果如下圖:
不過和java不同的是,我們不能將一個數組中的元素當做變長參數直接傳遞給方法,下面代碼執行就會報錯:
def max(values: Int*) = values.foldLeft(values(0)) { Math.max } val numbers = Array(2, 5, 3, 7, 1, 6) println(max(numbers))
執行結果:
如果想使用數組中的元素作為變長參數,可以將數組展開成為離散值:需要使用“:_*”符號組合:
val numbers = Array(2, 5, 3, 7, 1, 6)
println(max(numbers:_*))
執行結果:
在這一節里出現了兩個新的概念:函數(foldLeft)和數組(numbers)。尤其是函數,現在讀起來有些困難。不過很快就可以接觸到了。
#####