Scala中符号的导入和通配符导入

时间:2013-03-26 09:00:32

标签: class scala macros import scala-macros

我有一个表示包,对象和类的符号列表,并希望在宏上下文中导入它们。

对于包和对象,这将意味着通配符导入,对于类,它将意味着“标准”导入。

如果List[Symbol]some.packagesome.Classsome.Object组成,我将如何正确导入这些内容?如何判断是否为“标准”或通配符导入需要用吗?

我目前的做法是:

def importPackageOrModuleOrClass(sym: Symbol): Import =
  if (sym.isPackage || sym.isModule) // e. g. import scala._, scala.Predef
    gen.mkWildcardImport(sym)
  else                               // e. g. import java.lang.String
    gen.mkImport(sym.enclosingPackage, sym.name, sym.name) // <--- ?????

包/模块导入有效,但类导入虽然看起来不正确。

1 个答案:

答案 0 :(得分:1)

你需要像这样获得“TermName” ......

def importPackageOrModuleOrClass(sym: Symbol): Import =
if (sym.isPackage || sym.isModule)
    gen.mkWildcardImport(sym)
else
    gen.mkImport(sym.enclosingPackage, sym.name.toTermName, sym.name.toTermName)

您可以通过http://xuwei-k.github.io/scala-compiler-sxr/scala-compiler-2.10.0/scala/reflect/internal/Importers.scala.html

上的源代码获取有关导入,反映等的更多提示
相关问题