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 セクション 8.8 でのプログラミング 繰り返しパラメーターには、例を使用した簡単な説明があります。
セクション 8.8 から: val arr = Array("What's", "up", "doc?") を呼び出したとき
echo(arr: _*)
それは印刷されます
What's
up
doc?
arr: _* は、「arr」を繰り返しパラメーターとして扱うようにコンパイラーに指示する型宣言と同等です (例: vararg)。
こちらの記事でも丁寧に説明されています。
Range に対して zip メソッドを呼び出すことで、 type: の IndexedSeq 構造を作成していますIndexedSeq[(Int, Int)]
。(Int, Int) タプルを ParTrieMap に渡すには、タイプの割り当て (: _*
注釈) を作成する必要があります。これは、Seq を ParTrieMap に渡すことができないためです ( apply(seq: Seq[(A, B)])
ParTrieMap コンパニオン オブジェクトで定義されたシグネチャを持つメソッドはありませんが、apply(a: (A, B)*)
メソッドはあります)。 )。基本的に、Seq からすべてのタプルを抽出し、それらを Map に渡します。