Scala quasiquote使用反引号生成参数默认值

时间:2017-09-05 13:02:36

标签: scala scala-macros scala-quasiquotes

我需要生成:

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

但是这段代码:

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

输出由反引号包围的参数default,它不会编译:

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

如何在没有反引号的情况下获取默认参数值?

1 个答案:

答案 0 :(得分:2)

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

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