_ *的含义是什么

时间:2013-04-27 13:30:01

标签: scala syntax

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)会返回类似地图的内容,但_*跟随它的含义是什么?

2 个答案:

答案 0 :(得分:4)

Scala中的编程第8.8节重复的参数有一个简单的例子: _ *表示法告诉编译器将每个元素作为自己的参数传递给ParTrieMap

从第8.8节开始: val arr = Array(“What's”,“up”,“doc?”) 当你打电话

echo(arr: _*) 

它会打印

What's
up
doc?

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

此问题也很好地解释了post

答案 1 :(得分:3)

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