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

7
我有一些代表包、对象和类的符号列表,希望在宏环境中导入它们。
对于包和对象,这意味着通配符导入;而对于类,则是“标准”导入。
如果给定一个包含“some.package”、“some.Class”和“some.Object”的“List [Symbol]”,我该如何正确地导入它们?如何决定是使用“标准”导入还是通配符导入?
我的当前方法是:
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
我没有使用TreeGen的东西来完成这个,但如果你是在一个普通的宏中编写这个,你需要将sym.name(目前是一个TypeName)更改为TermName - Travis Brown
怎么做呢?我想我尝试过 asTerm,但是没有成功。 - soc
1
这里是一个快速示例,将您的代码与我之前进行的实验结合起来。无论您是否将“TypeName”转换为“TermName”,都会打印出相同的东西,但只有“TermName”版本有效。 - Travis Brown
谢谢,我搞定了!gen.mkImport(sym.enclosingPackage, sym.name.toTermName, sym.name.toTermName)可行! - soc
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接