查找符号在宏扩展点是否可见或阴影

时间:2016-04-13 14:19:17

标签: scala scala-macros scala-reflect

我有一个Symbol并且想要检查它是否在宏扩展点或阴影点(例如通过局部变量)可见,因此在quasiquote中拼接符号的名称不会引用其他内容。

查看http://docs.scala-lang.org/overviews/reflection/annotations-names-scopes.html,一个想法是查看封闭的词法范围并检查它们是否包含具有相同名称的符号;问题是我无法找到获取宏的直接封闭范围的方法。

1 个答案:

答案 0 :(得分:0)

解决方案基于som-snytt对scala-user的回复:

symbol.pos == c.typecheck(q"${symbol.name.toTermName}").symbol.pos

(我必须比较位置,因为在我的一次测试中,尽管名称,所有者和位置相同,但符号并不相同。)