具有可变数量参数的Scala类构造函数
问题描述:
如果我们将一个列表传递给一个采用可变数量参数的方法,它将起作用。具有可变数量参数的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]
任何想法如何解决这个问题?
答
它在两种情况下都不工作(注意在第一种情况下无用的WrappedArray
)。为了将一个序列作为一个可变参数列表传递,你需要像这样对待它。它的语法是相同的。在第一种情况:
testMethod(testList: _*)
而在第二种情况:
val t = new testClass(testList: _*)
可以解释这个符号的可变参数的语法类似的方式,唯一的区别是,这里的类型不是明确声明(用下划线代替)。