[英]Imports and wildcard imports of Symbols in 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” ......
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.