方法参数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
代码1:
object Example {
def main(args: Array[String]): Unit = {
println("Hello")
}
}
>> Hello
代码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)
答案 0 :(得分:6)
是的,
String*
是一个varargs,它接受任意数量的字符串,它将作为Seq[String]
传递给方法。
Array[String]
接受一个字符串数组。
如果您要将一系列字符串作为String*
传递,则不能直接这样做,但您可以" splat"输出序列以使用:_*
类型归属传递它。
def varArg(input: String*){}
val strings = Seq("hello", "world")
varArg(strings:_*)
答案 1 :(得分:2)
我去问the forum。
您想要的注释是annotation.varargs
。
我有些暗示他们有这种胶水,但我没有理由使用它。
就个人而言,我宁愿自动采用main
方法,b / c很明显。
$ scala
Welcome to Scala 2.12.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131).
Type in expressions for evaluation. Or try :help.
scala> object Main { @annotation.varargs def main(args: String*) =
| println(args.size)
| }
defined object Main
scala> Main.main(Array("hello","world"): _*)
2
好的,很酷。