所以这可能是一个愚蠢的问题,但是在刚开始使用OCaml之后,我现在在utop中遇到错误。我试图断言两个整数在结构上不相等。
assert 2 <> 3;;
Error: This expression has type int but an expression was expected of type
bool because it is in the condition of an assertion
整个语句会导致错误,但是只需键入我正确断言的表达式即可得出true。
2 <> 3;;
- : bool = true
我在原始的assert语句中添加了括号,从而解决了该问题。
assert (2 <> 3);;
- : unit = ()
我只是想知道到底发生了什么,如果没有括号会导致最初的错误。您通常什么时候需要括号?
这是一个具有优先级的问题,它确定如何“紧急”应用解析规则。 assert
具有相对较高的优先级,高于<>
和其他运算。这意味着该表达式
assert 2 <> 3
解析为
(assert 2) <> 3
而不是
assert (2 <> 3)
您可以在此处找到完整的优先级表:https://caml.inria.fr/pub/docs/manual-ocaml/expr.html#sec133