8-8 特殊的函式呼叫形式
阿新 • • 發佈:2020-11-29
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) }