scala可變長度引數概念
阿新 • • 發佈:2019-02-14
可變長度引數
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 。