我使用vscode,并扩展了"OCaml和Reason IDE">
这是我在utop:中的结果
utop # 1. = 1. ;;
Line 1, characters 0-2:
Error: This expression has type float but an expression was expected of type
int
也适用于字符串:
utop # "Me" = "Me";;
Line 1, characters 0-4:
Error: This expression has type string but an expression was expected of type
int
除了int:之外,其他都一样
utop # 2 = 2 ;;
- : bool = true
">"<"也有同样的症状。我不知道实际发生了什么。有人能帮我吗?非常感谢!
您可能正在使用JaneStreet Base库。也许你是这样进口的:
open Base;;
Base试图将异常限制为具有显式_exn
后缀的函数,因此它隐藏了内置的多态等式(=)
,后者可能会在某些输入上引发异常(例如,如果比较包含函数的结构(。
您可以按如下方式获取多态相等:
let (=) = Poly.(=);;
或者您可以将它与本地导入一起使用:Poly.(x = y)
。
多态比较有优点也有缺点。人们一致认为,使用单态比较(例如String.equal
等(是一个更稳健的选择,尽管它不太方便。