0
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)会返回类似 Map 的东西,但是_*遵循它的含义是什么?

4

2 回答 2

5

Programming in Scala Section 8.8 重复参数有一个例子的快速解释: _* notation 告诉编译器将每个元素作为它自己的参数传递给 ParTrieMap

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

echo(arr: _*) 

它会打印

What's
up
doc?

arr: _* 等价于告诉编译器将“arr”视为重复参数的类型声明,例如 vararg

这篇文章也解释得很好。

于 2013-04-27T14:20:52.343 回答
3

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

于 2013-04-27T14:11:34.717 回答