在宏中创建文字符号

时间:2014-02-24 06:14:39

标签: scala scala-macros

Context包含方法literal(Int)literal(String)等。如何根据名称创建文字符号(即'name)?有一个明显的解决方法:改为创建Symbol.apply(literal(name)),但我希望也应该有一个直接的方法。

2 个答案:

答案 0 :(得分:1)

q"'sym"太明显了吗?

c.Expr[Any](q"'mysym")

很明显,我的意思是,如果这显然不是你的意思,那就很抱歉。

不太方便,

c.Expr[Any](c.parse("'asym"))

c.Expr[Any](c.parse(s"'$name"))

或者可能很痛苦,

c.Expr[Any](Apply(c.typeOf[scala.Symbol].typeSymbol, c.literal("mysym").tree))

答案 1 :(得分:1)

在即将发布的2.11中,您将能够将符号取消引入quasiquote以获得正确的树而不会有麻烦:

val s: scala.Symbol = 'foo
q"$s" // q"'foo"

这应该在2.10中与macro paradise plugin一起使用。