scala學習手記21 - 傳遞變長參數


在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類的一個方法。上面的代碼實現了從一個集合中獲取最大數值的方法。

代碼執行結果如下圖:

image

不過和java不同的是,我們不能將一個數組中的元素當做變長參數直接傳遞給方法,下面代碼執行就會報錯:

def max(values: Int*) = values.foldLeft(values(0)) {
  Math.max
}
val numbers = Array(2, 5, 3, 7, 1, 6)
println(max(numbers))

執行結果:

image

如果想使用數組中的元素作為變長參數,可以將數組展開成為離散值:需要使用“:_*”符號組合:

val numbers = Array(2, 5, 3, 7, 1, 6)
println(max(numbers:_*))

執行結果:

image

在這一節里出現了兩個新的概念:函數(foldLeft)和數組(numbers)。尤其是函數,現在讀起來有些困難。不過很快就可以接觸到了。

#####


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM