具有可变数量参数的Scala类构造函数

时间:2016-07-15 15:10:00

标签: 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", "b", "c")

class TestClass(str: String*)

val t = new TestClass(testList)

// error: type mismatch

// found: List[String]

// required: [String]

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

1 个答案:

答案 0 :(得分:3)

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

testMethod(testList: _*)

在第二种情况下:

val t = new testClass(testList: _*)

您可以用类似于变量参数语法的方式来解释这种表示法,唯一的区别是这里没有明确说明类型(而是使用下划线)。