在宏内部是否有一种方法可以使用当前上下文来完全扩展类型名称?例如:
context.resolveShortTypeNameToFullTypeName("Foo") = "com.acme.Foo"
最佳答案
您的宏可能会在包含任意导入前缀.Foo
的树中展开,因此您询问是否可以查询该封闭树:如果我发出名称Foo
code>,你会如何类型检查它?
symbol.fullName
就是您的答案。
val t = c.typeCheck(q"??? : Foo").tpe.typeSymbol.fullName
或者在2.11中使用c.typecheck
。
或者,如果您找不到 scaladoc...
val k = c.asInstanceOf[scala.reflect.macros.contexts.Context]
locally {
import k.universe._
val n = k.callsiteTyper.typed(q"??? : Foo").tpe.typeSymbol.fullName
println(n)
}
当你需要Travis Brown Eugene Burmakro [原文如此]时他在哪里?
关于scala - 如何将宏中的短类型名称解析为完整类型名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683971/