【问题标题】:Interpret Scala syntax for varargs [duplicate]解释可变参数的 Scala 语法 [重复]
【发布时间】:2010-11-30 16:13:26
【问题描述】:

可能重复:
Syntax sugar: _*

我编写了一个函数,它传递了一个格式字符串(用于 String.format(...))和一个可变参数数组(除其他外)。该方法如下所示:

def myMethod(foo: Number, formatStr: String, params: Any*): Unit = {
  // .. some stuff with foo
  println(formatStr, params.map(_.asInstanceOf[AnyRef]) : _*)
}

我得到了 params 参数 here 的语法。有用!但是怎么做?我不明白 println 的第二个参数的语法,尤其是结尾部分 (: _*)。它显然是在调用map 并将数组扩展为AnyRefs 的序列。

【问题讨论】:

  • @Kevin:我同意。我投票结束了我的问题。

标签: scala syntax variadic-functions


【解决方案1】:

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

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 : _*)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 2020-09-21
      • 2015-07-29
      • 2020-03-07
      • 1970-01-01
      • 2017-11-20
      • 2018-05-16
      • 2018-06-29
      相关资源
      最近更新 更多