首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala:方法参数字符串*和Array[String]之间有什么区别吗?

Scala:方法参数字符串*和Array[String]之间有什么区别吗?
EN

Stack Overflow用户
提问于 2017-08-30 22:59:43
回答 2查看 774关注 0票数 3

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

控制台:

代码语言:javascript
复制
scala> def main(args: Array[String]): Unit = {}
main: (args: Array[String])Unit

scala> def main(args: String*): Unit = {}
main: (args: String*)Unit

代码1:

代码语言:javascript
复制
object Example {
  def main(args: Array[String]): Unit = {
    println("Hello")
  }
}

>> Hello

代码2:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-30 23:15:59

是,

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

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

如果您想作为一个String*传递一个字符串序列,您不能直接这样做,但是您可以使用:_*类型归属“拆分”这个序列来传递它。

代码语言:javascript
复制
def varArg(input: String*){}

val strings = Seq("hello", "world")
varArg(strings:_*)
票数 7
EN

Stack Overflow用户

发布于 2017-08-31 05:25:19

我去论坛上问。

您想要的注释是annotation.varargs

我有一些暗示,他们有胶水,但我从来没有理由使用它。

就我个人而言,我更希望main方法是自动的,b/c很明显。

代码语言:javascript
复制
$ 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

好吧,酷。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45970931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档