【问题标题】:Is it possible to write analog of shapeless Generic.from without macros是否可以在没有宏的情况下编写无形 Generic.from 的模拟
【发布时间】:2018-08-25 17:48:42
【问题描述】:

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

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

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

除了限制之外,我的用例也有一些缓解(不确定它们是否能提供帮助):

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

【问题讨论】:

    标签: scala shapeless scala-macros


    【解决方案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
    

    没有宏(或反射)。

    【讨论】:

    • 是的,这几乎就是我的想法并回答了我的问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2012-01-08
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多