1. 程式人生 > >scala筆記-變長引數(5)

scala筆記-變長引數(5)

變長引數

在Scala中,有時我們需要將函式定義為引數個數可變的形式,則此時可以使用變長引數定義函式。

def sum(nums: Int*) = {
  var res = 0
  for (num <- nums) res += num
  res
}

sum(1, 2, 3, 4, 5)
使用序列呼叫變長引數

在如果想要將一個已有的序列直接呼叫變長引數函式,是不對的。比如val s = sum(1 to 5)。此時需要使用Scala特殊的語法將引數定義為序列,讓Scala直譯器能夠識別。這種語法非常有用!一定要好好主意,在spark的原始碼中大量地使用到了。

val s = sum(1 to 5: _*)

案例:使用遞迴函式實現累加

def sum2(nums: Int*): Int = {
  if (nums.length == 0) 0
   else nums.head + sum2(nums.tail: _*)
 }