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) }