你如何调试类型级代码?
How do you debug typelevel code?
大多数时候,您得到的只是隐含的未找到错误。您不知道它在隐式构造链中的哪个位置失败了。显然你不能使用运行时调试或打印语句。那么除了死死地盯着你的代码之外,你如何调试类型级别的程序呢?
我希望我有一个更好的答案,但它是这样的:开始显式传递参数,一次一个,直到它给你一个更有用的错误。 (adding-prinlns-equivalent 对于隐式参数)
您可以对未定义的代码部分使用 ???
(因为它具有底部类型 Nothing
),对未知类型使用 _
。另请参阅 -Ytyper-debug
编译器选项(此处有更多选项:https://docs.scala-lang.org/overviews/compiler-options/index.html)。根据隐式参数和包装器的问题,"Idea" 具有很好的特性 "Show Implicit Hints" 和 "Implicit Arguments"(Main menu > Help > Find Action...
和类型,例如 implicit)。此外,您可以对 AnyRef 使用 Null
底部类型实例 null
,例如 null: YourTypeHere
。
大多数时候,您得到的只是隐含的未找到错误。您不知道它在隐式构造链中的哪个位置失败了。显然你不能使用运行时调试或打印语句。那么除了死死地盯着你的代码之外,你如何调试类型级别的程序呢?
我希望我有一个更好的答案,但它是这样的:开始显式传递参数,一次一个,直到它给你一个更有用的错误。 (adding-prinlns-equivalent 对于隐式参数)
您可以对未定义的代码部分使用 ???
(因为它具有底部类型 Nothing
),对未知类型使用 _
。另请参阅 -Ytyper-debug
编译器选项(此处有更多选项:https://docs.scala-lang.org/overviews/compiler-options/index.html)。根据隐式参数和包装器的问题,"Idea" 具有很好的特性 "Show Implicit Hints" 和 "Implicit Arguments"(Main menu > Help > Find Action...
和类型,例如 implicit)。此外,您可以对 AnyRef 使用 Null
底部类型实例 null
,例如 null: YourTypeHere
。