Scala中的异构映射,是否可能?

时间:2013-11-06 20:57:41

标签: scala map shapeless heterogeneous

所以问题在于标题。这里有一些解释: 我们知道,我们可以使用HList来存储具有类型的对象。

SomeCL[Int], SomeCL[String], SomeCL[MyType1] :: ... :: HNil

其中SomeCL是某类。所以我想制作制作地图,它可以存储内部所有类型的信息,如:

// it is wrong usage of HMap, it is an example of how I want it be
HMap("string1" -> SomeCL[Int], "string2" -> SomeCL[MyType1], ... )

不要丢失有关类型的信息。我想要注意的是,对象的类型和对象的数量是未知的,因此我们无法对原始的无形HMap使用大量的含义。可能吗?

EDITED

(我的意思是我们没有可能为无形HMap手动编写所有隐式类型转换

P.S。

如果不可能,我怎么能决定这样的问题:例如我在HList中有一些对象,而我正在构建图形。对每个节点的安全类型(我们从HList中的对象创建节点)非常重要,我不知道对象的数量。我如何构建图形,而不是松散有关类型的信息?

EDITED2

顺便说一句,如果S是超级类型AC,则此代码会抛出错误;我们怎么能避免这个呢?

class SomeCL[T](val l: T) {

}

class NodeMap[K, V]

implicit val si = new NodeMap[String, SomeCL[A]]
implicit val sd = new NodeMap[String, SomeCL[S]]
implicit val sb = new NodeMap[String, SomeCL[C]]

val hm = HMap[NodeMap]("foo" -> new SomeCL(new A), "bar" -> new SomeCL(new S), "lol" -> new SomeCL(new C))

2 个答案:

答案 0 :(得分:1)

是的,它是shapeless中为您提供的。 请参阅here

答案 1 :(得分:0)

  

对象类型和对象数量未知

然后你不能使用编译时类型信息,显然......你需要动态重建类型,例如使用模式匹配