【问题标题】:Scala quasiquote generating parameter default value with backticksScala quasiquote 使用反引号生成参数默认值
【发布时间】:2017-09-05 13:02:36
【问题描述】:

我需要生成:

case class Foo(param: Bar = BarEnum.SomeCaseObject)

但是这段代码:

val term = TermName("BarEnum.SomeCaseObject") 
showCode(q"""case class Foo(val param : Bar = ${term})""") 

输出由反引号包围的参数默认值,不编译:

case class Foo(param: Bar = `BarEnum.SomeCaseObject`)

如何获得不带反引号的默认参数值输出?

【问题讨论】:

    标签: scala scala-macros scala-quasiquotes


    【解决方案1】:

    您正在尝试使用 name“BarEnum.SomeCaseObject”创建值,这是非法标识符,因此在反引号中。

    您可以使用Select(Ident(TermName("BarEnum")), TermName("SomeCaseObject")) 或(更好)q"BarEnum.SomeCaseObject"(假设SomeCaseObject 是一个术语)。

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2017-09-18
      • 1970-01-01
      • 2021-04-17
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      相关资源
      最近更新 更多