2
我试图收集封闭范围内的所有vals。宏未找出封闭的值
这是宏实现:
import scala.language.experimental.macros
import scala.reflect.macro.blackbox.Context
def impl(c: Context) = {
import c.universe._
c.Expr[Seq[Any]](q"Seq(..${
c.internal.enclosingOwner.owner.typeSignature.decls.collect {
case s if s.isTerm && s.asTerm.isVal => Ident(s)
}
})")
}
def get(c: Context) = macro impl
这是我如何应用它:
object Foo {
val foo = ""
def poo = get
}
然后把它扔到了一个错误,没有任何意义对我说:
error: symbol value foo does not exist in Foo.poo
这是为什么发生?你如何防止它?
哦,它工作:)谢谢!你认为'Ident(Name)'可以随时使用吗?有没有我应该使用'Ident(Symbol)'的情况? –
说实话,自从引入了quasiquotes以来,我还没有使用'Ident'和朋友,而且在我的头顶,我无法想到以前使用'Ident(symbol)'的情况,或者文档中的示例等等 –
好的......谢谢你:) –