2016-07-15 126 views
2

如果我們將一個列表傳遞給一個採用可變數量參數的方法,它將起作用。具有可變數量參數的Scala類構造函數

val testList = List("a", "b", "c") 

def testMethod(str: String*): Seq[String] = str 

testMethod(testList) // outputs WrappedArray(List("a", "b", "c")) 

但是,如果我們在一個列表傳遞給類構造函數採用可變數量的參數,我們得到一個類型錯誤。

val testList = List("a", "b", "c") 

class TestClass(str: String*) 

val t = new TestClass(testList) 

// error: type mismatch 

// found: List[String] 

// required: [String] 

任何想法如何解決這個問題?

回答

3

它在兩種情況下都不工作(注意在第一種情況下無用的WrappedArray)。爲了將一個序列作爲一個可變參數列表傳遞,你需要像這樣對待它。它的語法是相同的。在第一種情況:

testMethod(testList: _*) 

而在第二種情況:

val t = new testClass(testList: _*) 

可以解釋這個符號的可變參數的語法類似的方式,唯一的區別是,這裏的類型不是明確聲明(用下劃線代替)。