如何在宏中将短类型名称解析为完整类型名称

时间:2014-02-10 17:28:26

标签: scala scala-2.10 scala-macros

在宏内部有一种方法可以使用当前的Context来完全扩展类型名称吗?例如:

context.resolveShortTypeNameToFullTypeName("Foo") = "com.acme.Foo"

1 个答案:

答案 0 :(得分:2)

您的宏可能会在包含任意import prefix.Foo的树中展开,因此您询问是否可以查询该封闭树:如果我发出名称Foo,您将如何进行类型检查?

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)
}

你需要他的时候<罢工>特拉维斯·布朗尤金·布尔马克罗[原文如此]?