为什么没有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,它必须标记为序列参数。能够将varargsvarargs(1)传递给单个函数没有多大意义。在SLS §4.6.2中进行了描述。

10-08 00:37