1. 程式人生 > >scala可變長度引數概念

scala可變長度引數概念

可變長度引數

Scala 允許你指明函式的最後一個引數可以是重複的。這可以允許客戶向函式傳入可變長度引數列表。想要標註一個重複引數,在引數的型別之後放一個星號。例如:

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

要實現這個做法,你需要在陣列引數後新增一個冒號和一個 _* 符號,像這樣:

scala> echo(arr: _*)
What's
up
doc?

這個標註告訴編譯器把 arr 的每個元素當作引數,而不是當作單一的引數傳給 echo 。