如何在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)

最近的REPL:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章