Scala 宏找不到封闭的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

我尝试在封闭范围内收集所有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.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上打电话给尤金·布尔马科(最近在这里很少见到他)。