解释 varargs 的 Scala 语法
可能的重复:
语法糖:_*
我编写了一个传递格式字符串的函数(对于 String.format(... )) 和一个 varargs 参数数组(除其他外)。该方法如下所示:
def myMethod(foo: Number, formatStr: String, params: Any*): Unit = {
// .. some stuff with foo
println(formatStr, params.map(_.asInstanceOf[AnyRef]) : _*)
}
我在此处获取了 params 参数的语法。有用!但如何呢?我不明白 println
第二个参数的语法,特别是结尾部分 (: _*
)。显然,它正在调用 map
并将数组扩展为 AnyRef
序列。
Possible Duplicate:
Syntax sugar: _*
I wrote a function that gets passed a format string (for String.format(...)) and a varargs array of parameters (among other things). The method looks like this:
def myMethod(foo: Number, formatStr: String, params: Any*): Unit = {
// .. some stuff with foo
println(formatStr, params.map(_.asInstanceOf[AnyRef]) : _*)
}
I got the syntax for the params argument here. It works! But how? I do not understand the syntax of the second argument to println
, particularly the ending part (: _*
). It is obviously calling map
and expanding the array to a sequence of AnyRef
s.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
通常,
:
表示法用于类型归属,强制编译器将值视为某种特定类型。这与强制转换不太相同。在本例中,您将指定特殊的 varargs 类型
_*
。这反映了用于声明 varargs 参数的星号表示法,并且可以用于子类Seq[T]
的任何类型的变量:Generally, the
:
notation is used for type ascription, forcing the compiler to see a value as some particular type. This is not quite the same as casting.In this case, you're ascribing the special varargs type
_*
. This mirrors the asterisk notation used for declaring a varargs parameter and can be used on a variable of any type that subclassesSeq[T]
:结尾部分
: _*
将集合转换为 vararg 参数。我知道,这看起来很奇怪。
The ending part
: _*
converts a collection into vararg parameters.It looks weird, I know.