22

通常不需要关注 Scala 中的隐式参数,但有时了解编译器如何自动提供它们非常有帮助。不幸的是,这种理解似乎很难获得!

是否有一种通用方法可以发现在给定代码中如何提供隐式参数?

理想情况下,有一天 IDE 集成会以某种方式提供此信息,但我希望现在我必须深入挖掘。有没有办法让编译器准确解释它在任何给定点选择的隐式定义?这可以从其他编译器输出中间接破译吗?

例如,我想知道如何自己解决implicit bf: CanBuildFrom[Repr, B, That]论点的TraversableLike.map来源,而无需阅读Stack Overflow 上的此类问题!

4

2 回答 2

17
  1. 将选项添加-Xprint:typer到 scalac 命令行。这会在 typer 编译器阶段之后打印程序树。这最适用于一个简短的、自包含的示例。您也可以将其传递给 scalac。这是 Scala 自力更生的一大步!
  2. 正如 Randall 所提到的,IntelliJ 显示范围内和选定的隐式视图CTRL-ALT-SHIFT-I。等待一两个月,隐含的论点可能会有类似的支持。
于 2010-07-05T13:45:38.830 回答
7

理想情况下,有一天 IDE 集成将以某种方式提供此信息,...

那一天就是今天 JetBrains 的 IDEA。如果您运行最新的 IDEA 版本 9 (9.0.3 EA #95.289) 的 EAP 和最近夜间发布的 Scala 插件,则存在此功能。可以选择每个值表达式并发出一个命令,该命令显示一个弹出窗口,显示所有适用的隐式转换,编译器将选择一个突出显示。

由于显然有些人还不知道它,因此有一个免费和开源的 IDEA 社区版,它确实支持 Scala 插件。

于 2010-07-05T13:37:19.073 回答