Scala 是否可以在不使用推断类型的情况下将列表转换为HList?
我是新来的无形体,我做这个Scala 是否可以在不使用推断类型的情况下将列表转换为HList?,scala,shapeless,Scala,Shapeless,我是新来的无形体,我做这个 val list1 = List(1, 2, 3) val list2 = List("a", "b", "c") val lists = List(list1, list2) val hlist = lists.toHList[List[Int] :: List[String] :: HNil] 这很好,但是当我不知道列表的大小和类型时,我想创建我的HList。可能吗?如果没有,是否有解决办法 提前谢谢 更新 为了给你一些上下文,这是我的用例 case clas
val list1 = List(1, 2, 3)
val list2 = List("a", "b", "c")
val lists = List(list1, list2)
val hlist = lists.toHList[List[Int] :: List[String] :: HNil]
这很好,但是当我不知道列表的大小和类型时,我想创建我的HList。可能吗?如果没有,是否有解决办法
提前谢谢
更新
为了给你一些上下文,这是我的用例
case class Data[T: ClassTag](list: List[T])
trait Transformation {
type T
type U
def transform(data: Data[T]) : Data[U]
}
class FromInt2String extends Transformation {
override type T = Int
override type U = String
override def transform(data: Data[T]) = new Data(List("1s", "2s", "3s"))
}
class FromString2Int extends Transformation {
override type T = String
override type U = Int
override def transform(data: Data[T]) = new Data(List(4, 5, 6))
}
object andThen extends Poly2 {
implicit def functions[A, B, C] = at[A => B, B => C](_ andThen _)
}
这些是我的对象,这是我的代码
val data = new Data(List(1, 2, 3))
val int2String = new FromInt2String()
val string2Int = new FromString2Int()
val transformationsHList = int2String.transform _ :: string2Int.transform _ :: HNil
val functions = transformationsHList.reduceLeft(andThen)
val data2 = functions(data)
我试着做这样的事
val transformationsList = List[Transformation](int2String, string2Int)
val transformations = allTransformations.toHList
HList
是关于静态跟踪元素类型的,所以不,这并不像前面所说的那样,但考虑到您的用例,可能有一种方法可以表示您需要的信息。谢谢Travis的回答