debugging - 是否有一种系统的方法来发现哪些隐式定义在范围内,以及哪些隐式定义在特定点绑定(bind)?

标签 debugging compiler-construction scala implicit

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

Is there a general method to discover how an implicit parameter has been provided, in a given piece of code?

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

举个例子,我想知道如何自己计算 implicit bf: CanBuildFrom[Repr, B, That] 在哪里TraversableLike.map 的参数来自,无需阅读类似 this one 的问题关于堆栈溢出!

最佳答案

  1. 将选项 -Xprint:typer 添加到 scalac 命令行。这会在打字机编译阶段之后打印程序树。这最适合一个简短的、独立的示例。您也可以将其传递给 scalac。这确实是 Scala 迈向自力更生的一大步!
  2. 正如 Randall 所提到的,IntelliJ 使用 CTRL-ALT-SHIFT-I 显示范围内和选定的隐式 View 。等一两个月,隐含的论点可能会得到类似的支持。

关于debugging - 是否有一种系统的方法来发现哪些隐式定义在范围内,以及哪些隐式定义在特定点绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3179415/

相关文章:

android - 我可以在 Android Studio 中出现错误时中断吗?

c - 是否有像 gccxml 这样的用于包装器生成的 C header 解析器工具?

c++ - C编译器??)替换

class - 如何实现案例类的实例共享

debugging - 使用 PHPStorm 8 进行 Xdebug — 在不存在的断点处打开错误的文件

c++ - 如何从基于 C++ 的 COM 对象写入 VB6 即时窗口?

c++ - 内联的目的是什么?

scala - 有哪些 Scala Web 框架可用?

Scala:找不到 ContextShift[cats.effect.IO] 的隐式值

Mysql 查询卡在生产数据库服务器上,但在本地工作正常