我使用 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
Run Code Online (Sandbox Code Playgroud)
对于字符串也同样如此:
utop # "Me" = "Me";;
Line 1, characters 0-4:
Error: This expression has type string but an expression was expected of type
int
Run Code Online (Sandbox Code Playgroud)
除 int 之外的任何内容都相同:
utop # 2 = 2 ;;
- : bool = true
Run Code Online (Sandbox Code Playgroud)
">" "<" 也有同样的症状。我不知道到底发生了什么。谁能帮我吗 ?多谢!
您可能正在使用 JaneStreet Base 库。也许你是这样导入的:
open Base;;
Run Code Online (Sandbox Code Playgroud)
Base 尝试限制具有显式_exn后缀的函数的异常,因此它隐藏了内置的多态相等性(=),这可能会在某些输入上引发异常(例如,如果比较包含函数的结构)。
您可以按如下方式恢复多态相等性:
let (=) = Poly.(=);;
Run Code Online (Sandbox Code Playgroud)
或者您可以将其与本地导入一起使用:Poly.(x = y)。
多态比较有利有弊。共识似乎是使用单态比较(例如,String.equal等)是一个更稳健的选择,尽管它不太方便。