4

私は Scala でデータ構造 (基本的にはハッシュマップ) を作成しています。これは (おそらく毎回異なる数の引数の) 1 つのタプルを取り、それを使って何かを行います。これを一般的に実装するために、次の型を定義しました。

type T <: Tuple1[_] with Tuple2[_,_] with Tuple3[_,_,_] with Tuple4[_,_,_,_] with Tuple5[_,_,_,_,_]

そしてデータ構造

val map = new HashMap[Int, T]

しかし、タプルでより多くの引数を処理する必要があるたびに型を変更する必要があるため、これは醜いです。ジェネリックタプル型を定義することはありますか?

ありがとう、YK

4

1 に答える 1

4

最初の解決策はProduct、@ om-nom-nomが言うように、を使用することです。確かに、それはすべてのタプルの唯一の一般的なスーパータイプです。

val map = Map.empty[Int, Product]
map + (2 -> ("a", "b"))

次に、メソッドを使用してproductArityproductElement戻りproductIterator値を処理します。

リストのマップ(またはインデックス付きのコレクション)を使用することもできます。

val map = Map.empty[Int, List[_]]
map + (3 -> ("a" :: "b" :: "c" :: Nil))
map + (2 -> List("a", "b"))

最後の解決策はユーザーにとってそれほど便利ではありませんが、少なくとも、処理するコレクションを正確に知っています。暗黙的に追加することもできます。

于 2012-12-09T12:05:49.720 に答える