我在Scala中编写一个数据结构(基本上是一个hashmap),它将采用一个元组(每次可能有不同数量的参数)并对其执行某些操作。为了统一实现这一点,我定义了一个类型:
type T <: Tuple1[_] with Tuple2[_,_] with Tuple3[_,_,_] with Tuple4[_,_,_,_] with Tuple5[_,_,_,_,_]
然后是数据结构
val map = new HashMap[Int, T]
但这很难看,因为每次我必须在元组中处理更多参数时我必须更改类型。是否定义了通用元组类型?
谢谢, Y.K。
答案 0 :(得分:4)
第一个解决方案是使用Product
,如@ om-nom-nom所述。实际上,它是所有元组中唯一常见的超类型。
val map = Map.empty[Int, Product]
map + (2 -> ("a", "b"))
然后使用方法productArity
,productElement
和productIterator
来处理返回的值。
您还可以使用列表地图(或任何索引集合)。
val map = Map.empty[Int, List[_]]
map + (3 -> ("a" :: "b" :: "c" :: Nil))
map + (2 -> List("a", "b"))
最后一个解决方案对用户来说并不方便,但至少你确切知道你处理的是什么集合。您还可以添加隐式。