在Scala的repl中,以编程方式查找隐式添加的函数

时间:2014-04-24 04:48:45

标签: scala read-eval-print-loop

我发现我越来越多地使用scala repl,当我没有网络时,我会使用它很多。我一直在添加自己的函数,以便更容易发现apis(通过python的dir端口)。我现在要做的就是通过implicits添加所有功能。我无法通过scala反射看到这种方法,所以我想我会看一下编译器,看看如何创建:implicits:https://github.com/scala/scala/blob/master/src/repl/scala/tools/nsc/interpreter/Imports.scala#L65

在repl中,有没有办法访问IMain实例?如果没有,是否有另一种获取隐式方法列表(或所有隐式转换方法)的方法?

我只关心在repl中获取这些细节,所以如果它不能在repl之外工作,那很好。

1 个答案:

答案 0 :(得分:1)

FWIW,我正在为标签完成做一些修复,一个建议的功能是在几个标签后显示增强功能。

scala> $intp
res0: scala.tools.nsc.interpreter.IMain = scala.tools.nsc.interpreter.ILoop$ILoopInterpreter@27fa135a

scala> :power
** Power User mode enabled - BEEP WHIR GYVE **
** :phase has been set to 'typer'.          **
** scala.tools.nsc._ has been imported      **
** global._, definitions._ also imported    **
** Try  :help, :vals, power.<tab>           **

scala> intp
res1: scala.tools.nsc.interpreter.IMain = scala.tools.nsc.interpreter.ILoop$ILoopInterpreter@27fa135a

scala> analyzer.allViewsFrom(IntTpe, typer.context, Nil)
res2: List[($r.intp.global.analyzer.SearchResult, List[$r.intp.global.analyzer.global.TypeConstraint])] = List((SearchResult(scala.this.Int.int2double, ),List()), (SearchResult(scala.this.Int.int2float, ),List()), (SearchResult(scala.this.Int.int2long, ),List()))