如何比较泛型类型的值?

时间:2013-01-15 16:55:08

标签: generics sml

考虑这样的代码:

fun equals(a : 'a,b : 'a) =
  a = b;

我的代码更大,但这是问题所在。 SML报告“错误:运算符和操作数不同意”。

我是SML的初学者,我不知道为什么会抱怨。这是否类似于C#问题,您无法真正比​​较任何类型的两个值,但您必须使用类型的默认相等比较器?我应该在'a上添加一些约束(我希望我把它写成通用类型)?

1 个答案:

答案 0 :(得分:9)

而不是'a,请使用''a

在它前面有两个引号而不是一个引号的类型是相等类型,这意味着=运算符对它起作用。这也意味着你不能在非平等类型的东西上调用你的函数。

此外,您实际上不必编写类型。如果您这样做:

fun equals (a,b) = a = b;

SML会推断出类型。