簡體   English   中英

Scala中符號的導入和通配符導入

[英]Imports and wildcard imports of Symbols in Scala

我有一個表示包,對象和類的符號列表,並希望在宏上下文中導入它們。

對於包和對象,這將意味着通配符導入,對於類,它將意味着“標准”導入。

給定一個List[Symbol]some.packagesome.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM