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

如何知道Scala隐式定义的来源?,scala,intellij-idea,Scala,Intellij Idea,我开发了一个类,它将隐式engineProvider:ClientsLengineProvider作为构造函数参数。当我实例化该类时,我的源文件中没有任何此类类型的隐式定义,但是代码编译时没有任何错误。当我使用调试器时,我可以看到这个参数是用一些值初始化的。看起来这个隐式是在其他地方定义的(在一个导入中) 我怎样才能找到定义它的确切位置?如果有必要,我将使用IDEA进行开发。如果您使用的是sbt,请将这一行添加到您的build.sbtbuild文件中 scalacOptions in ThisB

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


我怎样才能找到定义它的确切位置?如果有必要,我将使用IDEA进行开发。

如果您使用的是sbt,请将这一行添加到您的
build.sbt
build文件中

scalacOptions in ThisBuild += "-Xlog-implicits"

我还建议您查看
ClientsLengineProvider
的伴生对象(它是隐式的默认源之一)

也许只需使用
-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);

谢谢你的回答。不幸的是,使用-Xlog implicits,我只能看到很多关于具体化所请求的scala.reflect.type.ClassTag[…]的东西。。关于隐式参数,什么也没有。编辑:啊,当然,ClassTag是一个隐式参数。但我还是对我感兴趣的那个一窍不通。