在OCaml的assert语句中使用<>会导致错误

问题描述 投票:0回答:1

所以这可能是一个愚蠢的问题,但是在刚开始使用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 = ()

我只是想知道到底发生了什么,如果没有括号会导致最初的错误。您通常什么时候需要括号?

functional-programming ocaml assert
1个回答
0
投票

这是一个具有优先级的问题,它确定如何“紧急”应用解析规则。 assert具有相对较高的优先级,高于<>和其他运算。这意味着该表达式

assert 2 <> 3

解析为

(assert 2) <> 3

而不是

assert (2 <> 3)

您可以在此处找到完整的优先级表:https://caml.inria.fr/pub/docs/manual-ocaml/expr.html#sec133

© www.soinside.com 2019 - 2024. All rights reserved.