2017-09-05 71 views
1

我需要生成:斯卡拉quasiquote与反引号生成参数默认值

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`) 

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

回答

2

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

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