37

有人可以解释一下,这个警告是什么意思?

stdIn:18.35 Warning: calling polyEqual

以及为什么我在以下语句中有“a 而不是 'a:

val alreadyVisited = fn : ''a * ''a list -> bool

这是我的功能:

fun alreadyVisited(v, []) = false
    | alreadyVisited(v, x::xs) = if(x=v) then true
        else alreadyVisited(v, xs);
4

1 回答 1

56

'a表示“任何类型”,而''a表示“可以比较是否相等的任何类型”。由于您的alreadyVisited函数 comparexvusing =x并且v需要有一个支持比较它们是否相等的类型,所以您得到了 type ''a

警告意味着您正在比较两个具有多态类型的值是否相等。

为什么这会产生警告?因为它比比较两个已知类型的值是否相等效率低。

你如何摆脱警告?通过将您的函数更改为仅适用于特定类型而不是任何类型。

你应该关心警告吗?可能不是。在大多数情况下,我认为拥有一个适用于任何类型的函数比拥有最高效的代码更重要,所以我会忽略警告。

于 2010-12-01T19:13:02.790 回答