我对无形的全新。我从列表中创建一个案例类如下:
val list = Seq(Some(1), Some(1.0), ...)
val y =
list
.toHList[Option[Int]::Option[Double]::Option[Int]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::HNil]
val z = y.get.tupled
val aa = YieldVariables.tupled(z)
效果很好,但我想知道是否有办法不在toHList[Here]
部分写出所有这些类型。
所以我想知道list.toHList[find the type yourself]
或list.getTypesForHlist
或MyCaseClass.getTypesForHlist
之类的结果是否存在Option[Int]::Option[Double]...
。
答案 0 :(得分:3)
对于案例类(和元组,这些也是案例类!),使用Generic
:
case class A(i: Int, s: String)
shapeless.Generic[A].to(A(1, "")) // Int :: String :: HNil
Seq
无法做到这一点。实际上,只要您调用了构造函数,就会从类型的角度来看有关传递给该构造函数的元素数量的信息。 Shapeless还有SingletonProductArgs
:一个类似语法的变量宏,它返回HList
而不是Seq
。