1. 程式人生 > 實用技巧 >8-8 特殊的函式呼叫形式

8-8 特殊的函式呼叫形式

1.重複引數

  要表示這樣一個重複引數,需要在引數的型別之後加上一個星號(*)。

def main(args: Array[String]): Unit = {
  echo("hello", "world!")
}

def echo(args: String*) = {
  for (arg <- args) println(arg)
}

  在函式內部,這個重複引數的型別是一個所宣告引數型別的Array。但是不能直接將當做重複引數傳入,需要在陣列實參後面加上冒號和一個_*符號

def main(args: Array[String]): Unit = {
  val arr = Array("What's", "up", "doc?")

  //echo(arr) 型別不符

  echo(arr: _*)
}

def echo(args: String*) = {
  for (arg <- args) println(arg)
}

2.帶名字的引數

  用帶名字的引數發起呼叫,實參可以在不改變含義的前提下交換位置。

def main(args: Array[String]): Unit = {
  val sp = speed(time = 10, distance = 100)
  println(sp)
}

def speed(distance: Float, time: Float) = distance / time

3.預設引數值

  有預設值的引數可以不出現在函式呼叫中。

def main(args: Array[String]): Unit = {
  printTime()
}

def printTime(out: java.io.PrintStream = Console.out) = {
  out.println("time = " + System.currentTimeMillis())
}

  預設引數跟帶名字的引數放在一起時尤為有用。

def main(args: Array[String]): Unit = {
  //顯式地給出輸出流,時間除數填充為預設值
  printTime2(out = Console.err)
  
  //顯式地給出時間除數,輸出流填充為預設值
  printTime2(divisor = 1000)
}

def printTime2(out: java.io.PrintStream = Console.out, divisor: Int = 1) = {
  out.println("time = " + System.currentTimeMillis() / divisor)
}