通常不需要关注Scala中的隐式参数,但有时理解编译器如何自动提供它们非常有用。不幸的是,这种理解似乎很难获得!
是否有一般方法可以在给定的代码段中发现如何提供隐式参数?
理想情况下,有一天IDE集成会以某种方式提供这些信息,但我希望现在我必须深入挖掘。有没有办法让编译器准确解释它在任何给定点选择的隐式定义?这可以从其他编译器输出间接解密吗?
作为一个例子,我想知道如何在implicit bf: CanBuildFrom[Repr, B, That]
TraversableLike.map
的{{1}}参数的基础上自行解决,而不在Stack Overflow上阅读this one之类的问题!
答案 0 :(得分:14)
-Xprint:typer
添加到scalac命令行。这将在typer编译器阶段之后打印程序树。这最适合使用一个简短的自包含示例。您也可以将其传递给scalac。这是迈向Scala自立的一大步!CTRL-ALT-SHIFT-I
。等一两个月,隐含的论据可能会有类似的支持。答案 1 :(得分:7)
理想情况下,有一天IDE集成会以某种方式提供此信息,...
今天是JetBrains的IDEA。如果您使用最近每晚发布的Scala插件运行IDEA版本9(9.0.3 EA#95.289)的最新EAP,则此功能存在。可以选择每个值表达式,并发出一个命令,显示弹出窗口,显示所有适用的隐式转换,编译器将选择突出显示的转换。
由于显然有一些人还不知道它,因此有一个免费的开源社区版IDEA,它确实支持Scala插件。