【问题标题】:Get default case class arguments via Shapeless通过 Shapeless 获取默认案例类参数
【发布时间】:2018-11-23 21:31:30
【问题描述】:

shapeless 是否提供了一个类型类/宏来调用 HList,其中包含案例类的所有参数的默认值?

假设我们有这个案例类:

case class User(name: String, age: Int = 18)

那我想得到这样的HList

None :: Some(() => 18) :: HNil

【问题讨论】:

    标签: scala shapeless


    【解决方案1】:

    默认参数是通过合成方法实现的。 试试看特质。 https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/default.scala

    import shapeless.Default
    
    case class User(name: String, age: Int = 18)
    val d = Default[User]
    println(d())
    

    输出:

    None :: Some(18) :: HNil
    

    【讨论】:

    • 默认值被编译为产生该值的方法。在我的示例中,scala 将创建一个返回 18 的方法。我认为 shapeless 可能会提供对这些方法的引用。我试图自己实现这样一个宏,但我没有找到一个 api 允许宏编写器以某种方式获取这些生成的方法,即使理论上它应该是可能的......
    • 这似乎就是我想要的。您可以将其写为单独的答案以便我接受吗?
    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多