Scala 宏找不到封闭的VAL
我尝试在封闭范围内收集所有VAL 这是宏实现:Scala 宏找不到封闭的VAL,scala,macros,Scala,Macros,我尝试在封闭范围内收集所有VAL 这是宏实现: 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.collec
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
方法,则需要采用名称的Ident.apply
用
Ident(s.name)
替换Ident(s.name)
(或者可能更清楚一点q“this.$s”
)就可以了。哦,它成功了:)谢谢!您认为Ident(Name)
可以随时使用吗?有什么我应该使用Ident(Symbol)
的案例吗?老实说,自从Quasikotes被引入以来,我没有太多使用过Ident
和朋友,我脑子里想不起我以前使用过Ident(Symbol)
的案例,或者文档中的例子,等等。。。无论如何,谢谢你:)@RyoichiroOka:如果你真的很好奇,你可以在推特或IRC上打电话给尤金·布尔马科(最近在这里很少见到他)。