【问题标题】:What's the meaning of _* [duplicate]_*是什么意思[重复]
【发布时间】:2013-04-27 13:30:01
【问题描述】:
val numbers = scala.collection.parallel.mutable.ParTrieMap(
    (1 until 100) zip (1 until 100): _*
  ) map { case (k, v) => (k.toDouble, v.toDouble) }

对于上面的代码,我知道(1 until 100) zip (1 until 100) 会返回类似地图的东西,但是_* 跟在它后面是什么意思?

【问题讨论】:

标签: scala syntax


【解决方案1】:

在 Scala 中编程第 8.8 节重复参数有一个快速解释,并附有示例: _* 表示法告诉编译器将每个元素作为其自己的参数传递给 ParTrieMap

来自第 8.8 节: val arr = Array("What's", "up", "doc?") 当你打电话时

echo(arr: _*) 

它会打印出来

What's
up
doc?

arr: _* 相当于告诉编译器将“arr”视为重复参数的类型声明,例如可变参数

post 上也有很好的解释。

【讨论】:

    【解决方案2】:

    通过在 Range 上调用 zip 方法,您将创建 IndexedSeq 结构,其类型为:IndexedSeq[(Int, Int)]。要将 (Int, Int) 元组传递给 ParTrieMap,您必须进行类型说明(您的 : _* 注释),因为您无法将 Seq 传递给 ParTrieMap(在 ParTrieMap 伴随对象中没有定义 apply(seq: Seq[(A, B)]) 签名的方法,但有一个apply(a: (A, B)*) 方法)。基本上,您从 Seq 中提取所有元组并将它们传递给 Map。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2020-04-22
      • 2011-01-09
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 2015-02-20
      相关资源
      最近更新 更多