我正在编写自己的简约HList
/ Generic
实现,以为我自己的几种案例类派生编码器。
我设法写出ToTuple
的证据,但是我所有的案例类都有22个成员,所以我不能使用tupled
函数。另外,如果可能的话,我也想避免使用宏。
是否可以将HList转换为没有宏的case类?
除了局限性外,我的用例也没有什么好处(不确定它们是否可以帮助您):
答案 0 :(得分:1)
可以使用.productIterator
将案例类转换为hlist。
但是,可以通过宏(将hlist转换为case类)(或者在底层使用宏的情况下不变形)或编写
case class MyClass(i: Int, s: String, b: Boolean)
object MyClass {
def from(x: Int :: String :: Boolean :: HNil): MyClass = x match {
case i :: s :: b :: HNil => MyClass(i, s, b)
}
}
对于每个案例类。问题是你不会写
def from[T](x: ...): T = new T(...) //pseudocode
没有宏(或反射)。