是否可以在没有宏的情况下编写无形Generic.from的类似物

时间:2018-08-25 17:48:42

标签: scala shapeless scala-macros

我正在编写自己的简约HList / Generic实现,以为我自己的几种案例类派生编码器。

我设法写出ToTuple的证据,但是我所有的案例类都有22个成员,所以我不能使用tupled函数。另外,如果可能的话,我也想避免使用宏。

是否可以将HList转换为没有宏的case类?

除了局限性外,我的用例也没有什么好处(不确定它们是否可以帮助您):

  • 没有密封的特征,只有案例类
  • 我需要解码的所有案例类都在我的库中,因此我可以在其定义中添加最少的样板

1 个答案:

答案 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

没有宏(或反射)。