2017-09-05 3 views
1

Ich brauche zu generieren:Scala quasiquote Erzeugungs Parameter Standardwert mit Backticks

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

Aber diesen Code:

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

gibt den Standardparameter von Backticks umgeben, die nicht kompiliert:

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

Wie kann ich den Standard-Parameterwert ohne die Backticks ausgeben?

Antwort

2

Sie versuchen, Wert mit Name "BarEnum.SomeCaseObject" zu erstellen, das ist illegaler Bezeichner, also in Backticks.

Sie können Select(Ident(TermName("BarEnum")), TermName("SomeCaseObject")) oder (besser) q"BarEnum.SomeCaseObject" verwenden (vorausgesetzt, dass SomeCaseObject ein Begriff ist).