49

私はちょうどこの構造がウェブ上のどこかにあることに気づきました:

val list = List(someCollection: _*)

どういう_*意味ですか?これは、いくつかのメソッド呼び出しのシンタックスシュガーですか?このシンタックスシュガーを利用できるように、カスタムクラスはどのような制約を満たす必要がありますか?

4

3 に答える 3

73

一般に、:表記法は型の帰属に使用され、コンパイラーに値を特定の型として強制的に認識させます。これはキャストとまったく同じではありません。

val b = 1 : Byte
val f = 1 : Float
val d = 1 : Double

この場合、特別なvarargs型を割り当てています。これは、varargs パラメータの宣言に使用されるアスタリスク表記を反映しており、サブクラス化する任意の型の変数で使用できますSeq[T]

def f(args: String*) = ... //varargs parameter, use as an Array[String]
val list = List("a", "b", "c")
f(list : _*)
于 2010-11-14T10:23:47.663 に答える
18

これは、配列を展開するための scala 構文です。一部の関数は可変数の引数を取り、配列を渡すには、配列引数に追加する必要があり: _*ます。

于 2010-11-14T06:57:45.440 に答える