具有多个子类型的Scala通用(元组)类型

时间:2012-12-09 09:34:07

标签: scala generics tuples

我在Scala中编写一个数据结构(基本上是一个hashmap),它将采用一个元组(每次可能有不同数量的参数)并对其执行某些操作。为了统一实现这一点,我定义了一个类型:

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

然后是数据结构

val map = new HashMap[Int, T]

但这很难看,因为每次我必须在元组中处理更多参数时我必须更改类型。是否定义了通用元组类型?

谢谢, Y.K。

1 个答案:

答案 0 :(得分:4)

第一个解决方案是使用Product,如@ om-nom-nom所述。实际上,它是所有元组中唯一常见的超类型。

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

然后使用方法productArityproductElementproductIterator来处理返回的值。

您还可以使用列表地图(或任何索引集合)。

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

最后一个解决方案对用户来说并不方便,但至少你确切知道你处理的是什么集合。您还可以添加隐式。