1. ホーム
  2. scala

[解決済み] Scalaにおけるparam: _*の意味とは?

2022-12-02 06:02:52

質問

Scala (2.9.1)に慣れていないため、私は List[Event] があり、それを Queue[Event] にコピーしたいのですが、次の構文では Queue[List[Event]] を代わりに生成します。

val eventQueue = Queue(events)

なぜか、以下は動作します。

val eventQueue = Queue(events : _*)

しかし、私はそれが何を行うのか、なぜそれが動作するのかを理解したいのですが?私はすでに Queue.apply 関数のシグネチャを見ました。

def apply[A](elems: A*)

で、1回目の試みがうまくいかない理由はわかったけど、2回目の試みはどういうことなの?というのは : で、そして _* はこの場合、どうして apply 関数は単に Iterable[A] ?

どのように解決するのですか?

a: A はタイプアスクリプションです。 Scalaの型定義は何のためにあるのですか?

: _* は型付けの特別なインスタンスで、シーケンス型の単一の引数を可変引数シーケンス、すなわちvarargsとして扱うようにコンパイラに指示します。

を作成することは完全に有効です。 Queue を使用して Queue.apply はシーケンスまたはイテラブルである単一の要素を持つので、これはまさに単一の Iterable[A] .