scala - 如何将宏中的短类型名称解析为完整类型名称

标签 scala scala-2.10 scala-macros

在宏内部是否有一种方法可以使用当前上下文来完全扩展类型名称?例如:

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/

相关文章:

scala - scala StrictLogging和Lazylogging有什么区别?

scala - 在Scala 2.10中杀死或使Future超时

斯卡拉 : generics and variable inheritance issue

scala - 获取调用类

scala - 编译器将结构类型用于在白盒宏内生成的案例类

mongodb - 将 scala/spark 信息写入 MongoDB

scala - Scala 中方法、函数和部分应用函数的函数组合

scala - Spray 的 require 错误消息很难看...我该如何定制?

scala - 自动为案例类生成案例对象

Scalameta:识别特定注释