Scala 将可变参数传递给另一个采用可变参数的函数

Ade*_*lin 4 scala

为什么没有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 = {
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

And*_*cus 6

这是因为varars是一个参数 - 一个字符串数组(注意,我不是在写Array[String],因为它不是javaArray,更多细节在这里),而通过查看签名def someOtherFunction(someOtherVarars: String*): Unit,我们可以知道,这someOtherFunction需要每个类型有多个参数String。您不能简单地将数组作为参数传递给someOtherFunction,您需要先“展开”它。

\n\n

换句话说,可以传递给someOtherFunction它的参数必须被标记为序列参数。能够将varargs和传递varargs(1)给单个函数没有多大意义。它在SLS \xc2\xa74.6.2中进行了描述。

\n