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 的东西,但是_*
遵循它的含义是什么?
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
这篇文章也解释得很好。
通过在 Range 上调用 zip 方法,您正在创建 IndexedSeq 结构,其类型为:IndexedSeq[(Int, Int)]
。要将您的 (Int, Int) 元组传递给 ParTrieMap,您必须进行类型说明(您的: _*
注释),因为您不能将 Seq 传递给 ParTrieMap(apply(seq: Seq[(A, B)])
在 ParTrieMap 伴随对象中没有定义签名的方法,但是有一个apply(a: (A, B)*)
方法)。基本上,您从 Seq 中提取所有元组并将它们传递给 Map。