优先级
一元运算符总是比任意二元运算符结合性更强: $a + b 是 ($a) + b 而不是 $(a + b) 。
如果一个一元运算符的第一个字符是 @ ,它就是一个 sigil-like 运算符,比 primarySuffix 的结合性更强: @x.abc 被解析为 (@x).abc ,而 $x.abc 被解析为 $(x.abc) 。
对于不是关键字的二元运算符,优先级由以下规则决定:
以 -> 、 ~> 或 \=> 结尾的运算符被称为 arrow like “箭头”,在所有运算符中优先级最低。
如果运算符以 \= 结尾,并且其第一个字符不是 <, >, !, \=, ~, ? 中的任意一个,那么它就是一个 赋值运算符 ,具有第二低的优先级。
否则,优先级由第一个字符决定。
优先级 | 运算符 | 第一个字符 | 终结符号 |
---|---|---|---|
10 (最高) | $ ^ | OP10 | |
9 | / div mod shl shr % | % \ / | OP9 |
8 | + - | + - ~ | | OP8 |
7 | & | & | OP7 |
6 | .. | . | OP6 |
5 | == <= < >= > != in notin is isnot not of as from | = < > ! | OP5 |
4 | and | OP4 | |
3 | or xor | OP3 | |
2 | @ : ? | OP2 | |
1 | 赋值运算符 (如 +=, *=) | OP1 | |
0 (最低) | 箭头运算符 (like ->, =>) | OP0 |
一个运算符是否被用作前缀,会受到前置空格影响 (这个解析变化是在 0.13.0 版本中引入的) 。
echo $foo
# 解析为
echo($foo)
空格也决定了 (a, b) 是被解析为调用的参数列表,还是被解析为元组构造。
echo(1, 2) # 把 1 和 2 传递给 echo
echo (1, 2) # 把 tuple (1, 2) 传递给 echo
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .