警告:调用 polyEqual
有人可以解释一下,这个警告是什么意思吗?
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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
'a
表示“任何类型”,而''a
表示“可以比较相等性的任何类型”。由于您的alreadyVisited
函数使用=
、x
和x
和v
>v 需要有一个支持比较它们是否相等的类型,因此您会得到类型''a
。该警告意味着您正在比较两个具有多态类型的值是否相等。
为什么这会产生警告?因为它比比较已知类型的两个值是否相等效率较低。
你如何摆脱警告?通过将您的函数更改为仅适用于特定类型而不是任何类型。
你应该关心这个警告吗?可能不会。在大多数情况下,我认为拥有一个适用于任何类型的函数比拥有最有效的代码更重要,所以我会忽略警告。
'a
means "any type", while''a
means "any type that can be compared for equality". Since youralreadyVisited
function comparedx
andv
using=
,x
andv
need to have a type that supports comparing them for equality, so you get the type''a
.The warning means that you're comparing two values with polymorphic type for equality.
Why does this produce a warning? Because it's less efficient than comparing two values of known types for equality.
How do you get rid of the warning? By changing your function to only work with a specific type instead of any type.
Should you care about the warning? Probably not. In most cases I would argue that having a function that can work for any type is more important than having the most efficient code possible, so I'd just ignore the warning.