2016-03-25 9 views
7

Ich kann die im Scala-Code verwendeten impliziten Konvertierungen oder impliziten Argumentwerte nicht finden. Dies macht das Lesen von Open-Source-Projekten sehr unübersichtlich.Wie finde ich die implizite Funktion oder die Variablen in scala?

Der Trick implicitly kann nur helfen zu überprüfen, ob es eine gültige implizite Variable eines Typs gibt, aber nicht sagen konnte, wo die implizite Variable definiert wurde.

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

Gibt es einen einfachen Weg, um die Definitionen der impliziten Konvertierungen und Werte zu finden, indem ein Stück Code verwendet? Wenn die Quellcodedatei sehr lang ist, wird es eine große Arbeit sein.

Antwort

9

Ein Trick, der auf SO abgedeckt wurde:

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) 

Letzte REPL:

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