Scala 容许你指明函数的最后一个参数能够是重复的。这能够容许客户向函数传入可变长度参数列表。想要标注一个重复参数,在参数的类型以后放一个星号。例如:java
scala> def echo(args: String*) = for (arg <- args) println(arg) echo: (String*)Unit
这样定义, echo 能够被零个至多个 String 参数调用:数组
scala> echo() scala> echo("one") one scala> echo("hello", "world!") hello world!
函数内部,重复参数的类型是声明参数类型的数组。所以, echo 函数里被声明为类型“ String* ”
的 args 的类型其实是 Array[String]
。然而,若是你有一个合适类型的数组,并尝试把它看成
重复参数传入,你会获得一个编译器错误:函数
scala> val arr = Array("What's", "up", "doc?") arr: Array[java.lang.String] = Array(What's, up, doc?) scala> echo(arr) <console>:7: error: type mismatch; found : Array[java.lang.String] required: String echo(arr) ˆ
要实现这个作法,你须要在数组参数后添加一个冒号和一个 _*
符号,像这样:ui
scala> echo(arr: _*) What's up doc?
这个标注告诉编译器把 arr 的每一个元素看成参数,而不是看成单一的参数传给 echo 。scala