【发布时间】:2015-02-10 20:24:25
【问题描述】:
我想要一个不同类型的通用列表,我想要获取具有特定类型的对象。
我有这个结构:
trait Parent
case class A() extends Parent
case class B() extends Parent
case class C() extends Parent
我可以定义不同大小的不同列表:
val list:List[Parent] = A() :: B() :: C() :: C() ::Nil //or any size or ordering
我想在运行时将其转换为 A、B、C、C 的 Hlist。 .toHlist[] 需要在运行时推断的元素类型。 什么是无形的方式呢?有没有办法将它转换为元组?
【问题讨论】:
-
你想达到什么目的?
-
正如其他人回复的那样,一旦您转到
List[Parent],有关列表中各个元素的所有编译时类型信息(创建 HList 所必需的)都消失了。这是一个不可逆的操作。 -
@ziggystar 我需要使用这样的东西:myHlist.filter[A] 但由于我的代码中运行时流程不同,它可能是任何东西。假设我们有一个条件,所以在一个分支中它可能是 A::B::C::C 在另一个分支中可能是完全不同的东西,所以我在编译时没有类型顺序,有什么办法可以在我定义的每个分支都不一样?或者有没有其他方法可以达到同样的目标?