2012-06-20 88 views
23

可能重複:
What does :_* (colon underscore star) do in Scala?做什麼:_ *在從Scala調用Java可變參數方法時做什麼?

我使用REPL打電話與斯卡拉陣列一個Java可變參數的方法。

我得到一個錯誤,如果我這樣做:

case class Person(name: String, age: Int) 
val array = Array(classOf[String], classOf[Int]) 
Person.getClass.getMethod("apply", array) 

但是,如果我這樣做,那麼它的工作原理:

Person.getClass.getMethod("apply", array:_*) 

我的問題是什麼:_*辦?它在Scala API中定義在哪裏?

+0

不確定它是否完全重複。請注意,他使用重複的參數歸類調用Java方法,而不是Scala重複參數方法。 – axel22

+2

Stack Overflow在搜索符號方面做了一件糟糕的工作 - 事實上,它完全忽略了它們。如果您將來需要搜索符號,請使用[Symbol Hound](http://symbolhound.com/)。它將搜索Stack Overflow的問題,但保留這些符號。 –

回答

28

添加:_*告訴編譯器將數組視爲可變參數。它和Scala一樣和Java一樣。如果我有一個方法

def foo(args: Int*) = args.map{_ + 1} 

我可以把它作爲這樣的:

foo(1, 2, 3, 4) //returns ArrayBuffer(2, 3, 4, 5) 

,但如果我想要一個實際的序列傳遞給它(因爲你是getMethod),我會做:

val mylist = List(1, 2, 3, 4) 
foo(mylist:_*)