如何在Scala中获取方法或对象的包?
例如
import scala.math._
round().getClass // errors
是否可以获取所需的输出:"scala.math.round"
?这样我可以确定round()方法不会来自我导入的任何其他包。
PS。不使用Intellij IDE。 IDE会向您显示此信息,因此必须有一个IDE调用的函数来获取此信息。
编辑: 例如,在scala shell中运行这些命令
答案 0 :(得分:2)
通过Scala反射(libraryDependencies += scalaOrganization.value % "scala-reflect" % scalaVersion.value
中的build.sbt
),您可以做到
import scala.math._
import scala.reflect.runtime.universe._
object App {
def main(args: Array[String]): Unit = {
println(
showRaw(reify {
round(???)
})
)
}
}
运行时的输出将为
Expr(Apply(Select(Ident(scala.math.package), TermName("round")), List(Select(Ident(scala.Predef), TermName("$qmark$qmark$qmark")))))
或者您可以将scalacOptions in Compile ++= Seq("-Xprint-types", "-Xprint:typer")
添加到build.sbt
。
然后编译
package pckg
import scala.math._
object App {
round(???)
}
将产生(在编译时)
Warning:scalac: package pckg{pckg.type} {
import scala.math._;
object App extends scala.AnyRef {
def <init>(): pckg.App.type = {
App.super{pckg.App.type}.<init>{()Object}(){Object};
(){Unit}
}{Unit};
scala.math.`package`.round{(x: Long)Long}(scala.Predef.???{Nothing}){Long}
}
}