Scala:方法参数String*和Array [String]之间有区别吗

rap*_*apt 3 scala

方法参数String*Array[String]?之间有区别吗?

安慰:

scala> def main(args: Array[String]): Unit = {}
main: (args: Array[String])Unit

scala> def main(args: String*): Unit = {}
main: (args: String*)Unit
Run Code Online (Sandbox Code Playgroud)

代码1:

object Example {
  def main(args: Array[String]): Unit = {
    println("Hello")
  }
}

>> Hello
Run Code Online (Sandbox Code Playgroud)

代码2:

object Example {
  def main(args: String*): Unit = {
    println("Hello")
  }
}

>> Exception in thread "main" java.lang.NoSuchMethodException: Example.main([Ljava.lang.String;)
    at java.lang.Class.getMethod(Class.java:1786)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:126)
Run Code Online (Sandbox Code Playgroud)

puh*_*len 7

是,

String*是一个varargs,它接受任意数量的字符串,它将作为一个传递给方法Seq[String].

Array[String] 接受一个字符串数组.

如果你有一个你希望作为a传递的String序列String*,你不能直接这样做,但你可以"splat"出序列,使用:_*类型ascription 传递它.

def varArg(input: String*){}

val strings = Seq("hello", "world")
varArg(strings:_*)
Run Code Online (Sandbox Code Playgroud)