Scala String *类型(在args函数中)

时间:2018-08-09 10:16:01

标签: scala syntax

我有以下方法:

def m(a: String*) = { // ... }

我想知道星号(*)符号在此语法中的用途是什么?我显然是Scala的新手。我用谷歌搜索,但可能是在搜索错误的内容。任何帮助表示赞赏。

干杯!

3 个答案:

答案 0 :(得分:3)

它被称为“可变参数”(可变参数)。

def concat(strs: String*): String = strs.foldLeft("")(_ ++ _)

Scala REPL

scala> def concat(strs: String*): String = strs.foldLeft("")(_ ++ _)
concat: (strs: String*)String

scala> concat()
res6: String = ""

scala> concat("foo")
res7: String = foo

scala> concat("foo", " ", "bar")
res8: String = foo bar

答案 1 :(得分:3)

这称为repeated parameter (see Section 4.6.3 of the Scala Language Specification)

重复参数允许方法采用数量未指定的相同类型T的参数,这些参数可以在绑定到类型Seq[T]的参数的方法主体内访问。

在您的情况下,在方法m中,参数a将绑定到Seq[String]

答案 2 :(得分:1)

这是定义采用可变数量参数的方法的语法。

您的m方法可以使用0、1或多个参数,这些都是有效的调用:

m()
m("hello")
m("hello", "world")

如果使用适当的类型提示,也可以将集合传递给该方法:

val words = Seq("hello", "world")
m(words: _*)

您可以使用这段代码here on Scastie(在其中我实现了m作为输入字符串的串联)。