2

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

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

4

1 回答 1

0

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

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

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

于 2016-04-15T08:16:02.000 回答