7
私は、パッケージ、オブジェクト、クラスを表すSymbolのリストを持っており、それらをマクロコンテキストでインポートしたいと考えています。Scalaのシンボルのインポートとワイルドカードのインポート
パッケージとオブジェクトの場合、これはワイルドカードのインポートを意味し、クラスの場合は "標準"インポートを意味します。
考えるList[Symbol]
どのように私は適切にそれらをインポートするだろうし、どのように私は、「標準」またはワイルドカードのインポートを使用する必要があるかどうかを決めることができ、some.package
、some.Class
とsome.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」このようなを取得する必要があります'TreeGen'を使ってこれを行いましたが、これを普通の古いマクロで書いていたならば、' sym.name'(現在は 'TypeName'です)を' TermName'に変更する必要があります。 –
どうすればいいですか?私は 'asTerm'を試したと思うが、うまくいかなかった。 – soc
私はしばらく前に取り組んでいた実験とあなたのコードを組み合わせた[簡単な例](https://gist.github.com/travisbrown/5948460)です。 'TypeName'を' TermName'に変換するかどうかにかかわらず、 'TermName'バージョンだけが動作するかどうかにかかわらず、同じことが出力されます。 –