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