有什么方法可以找出整个隐含链(我对所有隐含的类感兴趣)。我正在使用IntelliJ Idea,但我正在寻找任何方法来做到这一点,即使我必须使用另一个IDE。 (我想知道REPL是否可以帮助我)
例如,我写a gt b
gt
来自scalaz
。我想知道:
Order
的隐式实例a
如何收到方法gt
。对于这个特定的例子,我知道使用了ToOrderOps
特征,但总的来说我可能不知道,我也无法弄清楚ToOrderOps
是如何导入的。答案 0 :(得分:20)
在REPL中使用Scala反射API通常是开始此类调查的好方法:
scala> import scala.reflect.runtime.universe.reify
import scala.reflect.runtime.universe.reify
scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._
scala> println(reify(1 gt 2))
Expr[Boolean](Scalaz.ToOrderOps(1)(Scalaz.intInstance).gt(2))
scala> println(reify("a" gt "b"))
Expr[Boolean](Scalaz.ToOrderOps("a")(Scalaz.stringInstance).gt("b"))
这里的ToOrderOps
是一种方法,而不是特征,而Scalaz
表示您正在看到它,因为scalaz.Scalaz
混合了ToOrderOps
特征,所以我认为这种方法可以解决你的所有三点。