3

所以问题出在标题上。这里有一些解释:众所周知,我们可以使用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], ... )

并且不要丢失有关类型的信息。我想注意,对象类型和对象数量 r 未知,因此我们不能对原生 shapeless 使用大量隐含HMap。可能吗?

已编辑

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

附言

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

已编辑2

S顺便说一句,如果是 and 的超类型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))
4

2 回答 2

1

是的,它在shapeless中为您提供。见这里

于 2013-11-07T06:38:22.770 回答
0

对象类型和对象数量 r 未知

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

于 2013-11-06T21:08:38.620 回答