如何在scala中找到隐式函数或变量

how to find the implicit function or variables in scala

我找不到在 Scala 代码中使用的隐式转换或隐式参数值。这使得阅读开源项目非常混乱。

implicitly技巧只能帮助检查是否存在某种类型的有效隐式变量,但无法判断隐式变量在哪里定义。

scala> implicitly[(Int) => RichInt]
res2: Int => scala.runtime.RichInt = <function1>

有没有一种简单的方法可以找到一段代码所使用的隐式转换和值的定义?如果源代码文件很长,工作量会很大。

SO 中介绍的一个技巧:

scala> import reflect.runtime._,universe._
import reflect.runtime._
import universe._

scala> reify { "abc".size }
res1: reflect.runtime.universe.Expr[Int] = Expr[Int](Predef.augmentString("abc").size)

最近的回复:

scala> 3 until 4 //print<hit tab completion>
   scala.Predef.intWrapper(3).until(4) // : scala.collection.immutable.Range

您还可以使用适用于 IntelliJ IDEA 的 Scala 插件。隐式转换如下划线(其中 Int 1 转换为 BigInt):

以上例子来自https://www.jetbrains.com/help/idea/2016.1/working-with-scala-implicit-conversions.html?origin=old_help#highlight。您可以在该页面上阅读更多内容。