参数数目可变的Scala类构造函数

参数数目可变的Scala类构造函数,scala,class,constructor,variadic-functions,Scala,Class,Constructor,Variadic Functions,如果我们将一个列表传递给一个接受可变数量参数的方法,它就会工作 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"

如果我们将一个列表传递给一个接受可变数量参数的方法,它就会工作

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]

知道我们如何解决这个问题吗?

这两种情况都不起作用(注意第一种情况下不需要的
WrappedArray
)。为了将序列作为变量参数列表传递,需要将其视为变量。它的语法是相同的。在第一种情况下:

testMethod(testList: _*)
在第二种情况下:

val t = new testClass(testList: _*)
您可以用变量参数语法的类似方式来解释此表示法,唯一的区别是这里没有明确说明类型(而是使用下划线)