Sway 参考手册/优先级和结合性
优先级(部分)描述了在包含不同运算符的表达式中,运算符的求值顺序。在 Sway 中,表达式
3 + 4 < 10 - 2
求值为真。特别是,3 + 4和10 - 2在<之前求值,得到7 < 8,这确实是真值。这意味着+和-的优先级高于<。如果<的优先级更高,那么4 < 10将首先求值,得到3 + true - 2,这是没有意义的。
请注意,优先级只是一个偏序关系。例如,我们无法确定3 + 4是否在10 - 2之前求值,反之亦然。仔细检查后,我们发现只要这两个运算都在涉及<的表达式求值之前执行,那么执行顺序并不重要。通常假设左操作数在右操作数之前求值。对于逻辑连接符,这确实是正确的。但是对于其他运算符,这样的假设可能会导致问题。你将在后面了解原因。现在,请记住永远、永远、永远不要依赖操作数求值的顺序!
Sway 中优先级最低的运算符是赋值运算符,稍后将进行描述。接下来是布尔连接符 && 和 ||。下一级是布尔比较运算符 <、<=、>、>=、== 和 !=。之后是算术运算符 +、-、*、/ 和 %。最后,优先级最高的是选择运算符或点运算符(点运算符是一个句号或句点)。高优先级的运算在低优先级的运算之前执行。以运算符语法调用的函数具有与数学运算符相同的优先级。
与你在小学学习的代数优先级不同,在 Sway 中,乘法和除法的优先级与加法和减法相同。因此,在这些运算符的组合中,左侧的运算在右侧的运算之前执行。要强制乘法和除法在加法和减法之前执行,必须使用括号。例如
sway> 5 + 2 * 3 //5 plus 2 is 7, 7 times 3 is 21 INTEGER: 21
但是
sway> 5 + (2 * 3) //2 * 3 is 6, 5 + 6 is 11 INTEGER: 11
结合性描述了如何对由相同优先级运算符连接的多个表达式进行求值。除赋值运算符外,所有运算符都是左结合的。例如,表达式 5 - 4 - 3 - 2 - 1 等价于 ((((5 - 4) - 3) - 2) - 1)。对于左结合结构,等价的、完全带括号的结构在左侧堆积了开括号。如果减法运算符是右结合的,则等价的表达式将是 (5 - (4 - (3 - (2 - 1)))),其中闭括号在右侧堆积。对于交换运算符,它是左结合还是右结合并不重要。但是,减法不是交换的,因此结合性很重要。对于给定的表达式,左结合求值为 -5。如果减法是右结合的,则求值为 3。唯一右结合的运算符是赋值运算符。你将在赋值章节中看到原因。