解释 varargs 的 Scala 语法

发布于 2024-10-05 23:26:36 字数 630 浏览 3 评论 0原文

可能的重复:
语法糖:_*

我编写了一个传递格式字符串的函数(对于 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 AnyRefs.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灼痛 2024-10-12 23:26:36

通常,: 表示法用于类型归属,强制编译器将值视为某种特定类型。这与强制转换不太相同。

val b = 1 : Byte
val f = 1 : Float
val d = 1 : Double

在本例中,您将指定特殊的 varargs 类型 _*。这反映了用于声明 varargs 参数的星号表示法,并且可以用于子类 Seq[T] 的任何类型的变量:

def myMethod(params: Any*) = ... //varargs parameter, use as an Array[Any]

val list = Seq("a", 42, 3.14) //a Seq[Any]
myMethod(list : _*)

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.

val b = 1 : Byte
val f = 1 : Float
val d = 1 : Double

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 subclasses Seq[T]:

def myMethod(params: Any*) = ... //varargs parameter, use as an Array[Any]

val list = Seq("a", 42, 3.14) //a Seq[Any]
myMethod(list : _*)
谢绝鈎搭 2024-10-12 23:26:36

结尾部分 : _* 将集合转换为 vararg 参数。

我知道,这看起来很奇怪。

The ending part : _* converts a collection into vararg parameters.

It looks weird, I know.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文