0

我使用 vscode,扩展名为“OCaml and 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

">" "<" 也有同样的症状。我不知道实际发生了什么。谁能帮我吗 ?非常感谢!

4

1 回答 1

6

您可能正在使用 JaneStreet Base 库。也许你是这样导入的:

open Base;;

Base 尝试将异常限制为具有显式_exn后缀的函数,因此它隐藏了内置的多态相等性(=),这可能会在某些输入上引发异常(例如,如果您比较包含函数的结构)。

您可以按如下方式获得多态相等性:

let (=) = Poly.(=);;

或者您可以将其与本地导入一起使用:Poly.(x = y).

多态比较有利有弊。共识似乎是使用单态比较(例如,String.equal等)是一个更稳健的选择,尽管它不太方便。

于 2020-04-13T10:34:27.940 回答