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