9

我正在使用WartRemover工具来避免我的 Scala 2.11 代码中可能出现的错误。

具体来说,我想知道如何修复产品类型推断错误。

查看 repo 文档,我只能看到失败示例,但我想知道我应该如何修复该错误:

https://github.com/puffnfresh/wartremover#product

做完我的功课,我最终得到了另一个链接,该链接解释了如何修复类型推断失败错误https://blog.cppcabrera.com/posts/scala-wart-remover.html。我引用“如果您看到下面的任何警告,修复通常就像提供类型注释一样简单”,但我不明白这意味着什么。我真的需要一个具体的例子。

4

2 回答 2

6

Product是一种非常抽象的高级类型,约束很少。当推断类型为Product时,这通常表明您犯了错误。例如,如果您有:

List((1, "hi", 0.4f), (2, "bye"), (3, "aloha", 7.2f))

然后这将编译好,给你一个List[Product]. 但是,正如Any所推断的那样,这可能是一个错误 - 您可能意味着它是 aList[(Int, String, Float)]并且意味着在中间元组中有第三个条目。

如果你真的想要 a List[Product],你可以通过明确给出 type 参数来避免收到警告:

List[Product]((1, "hi", 0.4f), (2, "bye"), (3, "aloha", 7.2f))
于 2014-12-17T16:01:48.867 回答
1

类型注释只不过是显式指定类型,而不是将其留给类型推断系统处理。

在这种情况下,最简单的示例可以是:

val element = 2

目前推断的类型是Int,如果你想对指定类型有更多的控制Byte, Short, Long, Double,你可以明确地将类型指定为:

val element: Double = 2

公共方法也需要类型注释,因为

在这些情况下,类型推断可能会破坏封装,因为它取决于内部方法和类的详细信息

来源

于 2014-12-17T16:11:53.847 回答