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)'的情況,或者文檔中的示例等等 –
好的......謝謝你:) –