7

パッケージ、オブジェクト、クラスを表すシンボルのリストがあり、それらをマクロコンテキストにインポートしたいと思います。

パッケージとオブジェクトの場合、これはワイルドカードインポートを意味し、クラスの場合、これは「標準」インポートを意味します。

、、およびで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) // <--- ?????

パッケージ/モジュールのインポートは機能しますが、クラスのインポートは正しく見えますが機能しません。

4

1 に答える 1

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

于 2013-07-14T08:38:49.117 に答える