4

我正在Scala中编写一个数据结构(基本上是一个哈希图),它将采用一个元组(每次可能有不同数量的参数)并对其进行处理。为了一般地实现这一点,我定义了一个类型:

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"))

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

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

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

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

于 2012-12-09T12:05:49.720 回答