Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中的异构映射,可能吗?_Scala_Map_Shapeless_Heterogeneous - Fatal编程技术网

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
使用大量隐式。可能吗

已编辑

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

附言

如果不可能,我如何确定这样的问题:例如,我在
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您能问一个单独的问题或提供更多信息吗?