在 F# 中,布尔逻辑运算符的优先级从高到低如下(括号可显式改变优先级):
优先级顺序(高 → 低)
-
not
- 一元逻辑非运算符(最高优先级)
- 示例:
not true
→false
-
&&
- 逻辑与运算符(短路求值)
- 示例:
true && false
→false
-
||
- 逻辑或运算符(短路求值)
- 示例:
true || false
→true
关键规则
-
短路求值(Short-Circuiting),也称惰性计算:
&&
:若左侧为false
,右侧不计算。||
:若左侧为true
,右侧不计算。
-
结合性:
&&
和||
均从左向右结合。- 示例:
a && b && c
→(a && b) && c
- 示例:
示例与优先级验证
// 示例 1:not 优先于 &&
not true && false // = (not true) && false → false && false → false// 示例 2:&& 优先于 ||
true || false && false // = true || (false && false) → true || false → true// 示例 3:显式括号改变优先级
not (true && false) // = not (false) → true
完整运算符表(部分相关)
运算符 | 描述 | 优先级组 |
---|---|---|
not |
逻辑非 | 最高 |
&& |
逻辑与 | 中 |
|| |
逻辑或 | 最低 |
提示: 不妨把
not
看作数字运算中的负号-
,&&
看作乘号×
,||
看作加号+
,那么优先级也就一目了然了。