在Scala REPL中查找已使用的implicit参数

4

我经常使用Scalaz pimps找到解决问题的好方法。通常这种解决方案可以像这样工作:

import scalaz._
import Scalaz._
foobar frobnicate quux
// magic

现在,我希望能够看到我实际使用了哪些隐式转换来为我的Foobar添加一个frobnicate方法。通过这种方式,我可以进行更精细的导入,并学习有关我隐式使用的工具的新知识。

有没有一种方法可以找出编译器实际用于编译某个表达式的隐式转换?


不完全符合您的要求,但您可以使用 ":implicits" 在当前作用域中列出所有隐式。 - om-nom-nom
我知道,但问题是如果我导入Scalaz._,会有很多隐式值,而且浏览它们都不太实际... - Andrea
1
相关:https://dev59.com/SXA75IYBdhLWcg3wqK10 - retronym
1
https://dev59.com/EGkw5IYBdhLWcg3wSoos#10001117 - retronym
2个回答

5
您可以使用-Xprint:typer选项来查看您的代码的完全展开版本。在sbt项目中,可以添加以下行:
scalacOptions += "-Xprint:typer"

打开build.sbt文件,运行compile命令查看结果。

(摘自retronym提供的答案)


3
Scala插件可以在Eclipse中显示使用的隐式转换。一个小图标会出现在使用它的行的左侧。我认为Intellij也有类似的功能。

1
不错,但我没有使用集成开发环境,而且我不知道为了仅仅这个是否值得麻烦地配置和学习一个。 - Andrea
实际上,你所需要做的就是下载并解压它:http://typesafe.com/stack/scala_ide_download - Kim Stebel
我已经尝试过,但当我尝试将工作区更改为包含我的Play项目的给定文件夹时,它会崩溃。 - Andrea
选择另一个文件夹,使用sbt eclipse,并将您的项目导入为“现有的Eclipse项目”。 - Kim Stebel
太棒了!:-D 谢谢你的提示,比我想象的要容易! - Andrea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接