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

Uni*_*qus 2 scala intellij-idea

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

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

Eug*_*nev 8

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

scalacOptions in ThisBuild += "-Xlog-implicits"
Run Code Online (Sandbox Code Playgroud)

我还建议你看看ClientSSLEngineProvider它的伴侣对象(它是暗示的默认来源之一)


som*_*ytt 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);
Run Code Online (Sandbox Code Playgroud)