为什么没有varargs
不能将varargs
作为另一个:_*
传递?
object Main {
def main(s: Array[String]): Unit = {
def someFunction(varars: String*) = {
someOtherFunction(varars) // Compilation ERRRO
someOtherFunction(varars:_*) // Works, but why ?
}
def someOtherFunction(someOtherVarars: String*): Unit = {
}
}
}
最佳答案
这是因为varars
是一个参数-字符串数组(请注意,我没有写Array[String]
,因为它不是,而不是 java Array
,更多细节here),而通过查看签名def someOtherFunction(someOtherVarars: String*): Unit
,我们可以知道, someOtherFunction
分别接受多个String
类型的参数。您不能简单地将数组作为参数传递给someOtherFunction
,您需要首先“展开”它。
换句话说,可以将一个参数传递给someOtherFunction
,它必须标记为序列参数。能够将varargs
和varargs(1)
传递给单个函数没有多大意义。在SLS §4.6.2中进行了描述。