所以问题在于标题。这里有一些解释:
我们知道,我们可以使用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
是超级类型A
和C
,则此代码会抛出错误;我们怎么能避免这个呢?
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))