Scala中的异构映射,可能吗?
所以问题出在标题上。下面是一些例子: 正如我们所知,我们可以使用Scala中的异构映射,可能吗?,scala,map,shapeless,heterogeneous,Scala,Map,Shapeless,Heterogeneous,所以问题出在标题上。下面是一些例子: 正如我们所知,我们可以使用HList来存储对象及其类型 SomeCL[Int], SomeCL[String], SomeCL[MyType1] :: ... :: HNil 其中SomeCL是某个类。所以我想制作一个make map,它可以存储所有类型的信息,比如: // it is wrong usage of HMap, it is an example of how I want it be HMap("string1" -> SomeCL[
HList
来存储对象及其类型
SomeCL[Int], SomeCL[String], SomeCL[MyType1] :: ... :: HNil
其中SomeCL
是某个类。所以我想制作一个make map,它可以存储所有类型的信息,比如:
// it is wrong usage of HMap, it is an example of how I want it be
HMap("string1" -> SomeCL[Int], "string2" -> SomeCL[MyType1], ... )
不要散播关于类型的信息。我想注意的是,对象类型和对象数量r未知,因此我们不能对本机无形状HMap
使用大量隐式。可能吗
已编辑
(我的意思是,我们不可能为shapessHMap
手动编写所有隐式类型转换)
附言
如果不可能,我如何确定这样的问题:例如,我在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))
对象类型和对象数量未知
显然,您不能使用编译时类型信息。。。您需要动态地重构类型,例如使用模式匹配是,它在中为您提供。
请参阅。mm,它们在编译之前就已经知道了源代码,但我的意思是,我们不可能为无形状的
HMap
(对于bimapi
)手动编写所有隐式类型转换。顺便说一句,u mb回答了我的问题,我是白痴,mb我应该而且我可以写implicits.thx作为回答,y,我尝试将implicits用于无形状的HMap
,但它抛出了错误(在edited2
之后,在我上面的帖子中试试这个例子);我试着让smth像:val-hmap=(“string1”->>3)::(“string2”->>true):(“string3”->>boolean)::HNil;hmap(“string1”)代码>mb它会有帮助,我稍后会测试它,mb它适合我:)我会写结果。有进展吗?看来我也有同样的问题。在我的例子中,SomeCL[T]
稍微复杂一点(例如,它有一个HMap),因此我无法手动创建隐式:)如果编译器可以推断出来,那就太好了。@user3127060您能问一个单独的问题或提供更多信息吗?