2016-07-15 124 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: _*) 

可以解释这个符号的可变参数的语法类似的方式,唯一的区别是,这里的类型不是明确声明(用下划线代替)。