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

标签 class scala macros import scala-macros

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

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

给定一个 List[Symbol]some.package 组成, some.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) // <--- ?????

包/模块导入有效,但类导入不起作用,尽管它看起来正确。

最佳答案

你需要像这样获得“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 的源代码获取更多关于导入、反射等的提示。

关于class - Scala 中符号的导入和通配符导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632955/

相关文章:

Python:TypeError __init__() 正好需要 5 个参数(给定 4 个)

java - 不同包中的两个类如何隔离它们?

scala - yarn 上的 Spark ;如何将指标发送到 Graphite 水槽?

scala - scala 编译器可以在混合时强制实现抽象特征方法吗?

scala - 减少/折叠幺半群列表但减少器返回任一

c++ - 如何使用宏或元编程在 C++ 中创建 'passthru' 函数?

php - PHP 是否可以像 Lisp 宏一样编写额外的 PHP 函数?

c++ - 使用某个宏时如何禁止调用特定函数

java - 在 java 中寻找 mipmap 生成器

PHP:如何在类中创建动态变量