如何知道Scala隐含定义的来源?

时间:2014-09-16 19:41:49

标签: scala intellij-idea

我开发了一个以implicit engineProvider: ClientSSLEngineProvider作为构造函数参数的类。当我实例化类时,我在源文件中的任何地方都没有这种类型的隐式定义,但代码编译没有任何错误。当我使用调试器时,我可以看到这个参数是用一些值初始化的。看起来这个隐式是在其他地方定义的(在其中一个导入中)。

如何找到定义它的确切位置?如果重要的话,我会使用IDEA进行开发。

2 个答案:

答案 0 :(得分:8)

如果您正在使用sbt,请将此行添加到build.sbt构建文件中。

scalacOptions in ThisBuild += "-Xlog-implicits"

我还建议您查看ClientSSLEngineProvider的伴随对象(它是隐含的隐含来源之一)

答案 1 :(得分:5)

也许只需使用-Xprint:typer查看使用的内容:

$ scala -Xprint:typer

scala> Future(1)

     private[this] val res0: scala.concurrent.Future[Int] = scala.concurrent.Future.apply[Int](1)(scala.concurrent.ExecutionContext.Implicits.global);