Scala允許的重復參數
作者:Martin Odersky等
本文節選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第八章。Scala是一種針對 JVM 將函數和面向對象技術組合在一起的編程語言。
Scala允許你指明函數的***一個參數可以是重復的。這可以允許客戶向函數傳入可變長度參數列表。想要標注一個重復參數,在參數的類型之后放一個星號。例如:
- scala> def echo(args: String*) =
- for (arg < - args) println(arg)
- echo: (String*)Unit
51CTO編輯推薦:Scala編程語言專題
這樣定義,echo可以被零個至多個String參數調用:
函數內部,重復參數的類型是聲明參數類型的數組。因此,echo函數里被聲明為類型“String*”的args的類型實際上是Array[String]。然而,如果你有一個合適類型的數組,并嘗試把它當作重復參數傳入,你會得到一個編譯器錯誤:
- scala> echo()
- scala> echo("one")
- one
- scala> echo("hello", "world!")
- hello
- world!
要實現這個做法,你需要在數組參數后添加一個冒號和一個_*符號,像這樣:
- 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。
【相關閱讀】
責任編輯:book05
來源:
Artima