Mam listę symboli reprezentujących pakiety, obiekty i klasy i chcę je importować w kontekście makro.Import i symbole wieloznaczne w Symbole w Scala
Dla pakietów i obiektów oznaczałoby to import symboli wieloznacznych, a dla klas oznaczałoby to "standardowy" import.
Biorąc pod uwagę List[Symbol]
składający some.package
, some.Class
i some.Object
, jak bym właściwie importować te i jak mogę zdecydować, czy „standard” lub import wieloznaczny musi być używany?
Moje obecne podejście jest takie:
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) // <--- ?????
Prace pakiet import/modułu, ale import klasa nie choć wygląda poprawne.
nie mam zrobić to z rzeczami 'TreeGen', ale jeśli pisałeś to w zwykłym starym makrze, musiałbyś zmienić' sym.name' (który jest obecnie 'TypeName') na' TermName'. –
Jak to zrobić? Myślę, że próbowałem 'asTerm', ale to nie działało. – soc
Oto [szybki przykład] (https://gist.github.com/travisbrown/5948460), który łączy Twój kod z eksperymentem, nad którym pracowałem jakiś czas temu. To samo zostanie wydrukowane bez względu na to, czy konwertujesz 'TypeName' na' TermName', czy też nie, ale działa tylko wersja 'TermName'. –