aardio 操作符优先级与 C系语言基本兼容,唯一的区别是:位运算符优先级略高于等式、不等式运算符。从而保证各组运算符的优先级更加有序、并容易记忆。
试图记住所有的运算符优先级是不必要的,建议在易于混淆优先级的位置用括号明确标明优先级。
| 操作符 | 优先级 | 结合 | 说明 |
|---|---|---|---|
成员操作符.下标操作符 [] 直接下标 [[]]调用操作符 () 元表操作符 @ |
1 | 左向右 | . 、[]、 [[]] 都是用于访问对象成员的操作符。 调用操作符用于调用函数 或类构造函数,例如 print("参数") 。 |
| () | 2 | 左向右 | 用于组合表达式并改变优先级。 |
** |
3 | 右向左 | 乘方运算 |
| 操作符 | 优先级 | 结合 | 说明 |
|---|---|---|---|
! |
4 | 左向右 | 逻辑非 |
| not | 5 | 左向右 | 逻辑非 |
- |
6 | 左向右 | 取负 |
~ |
7 | 左向右 | ~ 按位取反 |
| 操作符 | 优先级 | 结合 | 说明 |
|---|---|---|---|
*乘 /除 %取模 |
8 | 左向右 | |
+加 -减 |
9 | 左向右 |
| 操作符 | 优先级 | 结合 | 说明 |
|---|---|---|---|
<< 按位左移 >> 按位右移 >>>无符号右移 |
10 | 左向右 | |
&按位与 ^按位异或 | 按位或 |
11 | 左向右 | C 语言中位运算符的优先级 低于 ==、!= |
| 操作符 | 优先级 | 结合 | 说明 |
|---|---|---|---|
++ |
12 | 右向左 | 连接运算符 |
| 操作符 | 优先级 | 结合 | 说明 |
|---|---|---|---|
<小于 <=小于等于 >=大于等于 >大于 |
13 | 左向右 |
| 操作符 | 优先级 | 结合 | 说明 |
|---|---|---|---|
== != === !== |
14 | 左向右 | 等于、不等于、恒等、非恒等于 |
&& and |
15 | 左向右 | 逻辑与 |
| || or |
16 | 左向右 | 逻辑或 |
? |
17 | 左向右 | 逻辑与、该运算符类似于and但优先级更低 |
: |
18 | 左向右 | 逻辑或、该运算符类似于or但优先级更低 |
| 操作符 | 优先级 | 结合 | 说明 |
|---|---|---|---|
= += -= *= /= &= ^= |= <<= >>= |
最低优先级 | 由右向左 | aardio中赋值操作符不能用于表达式并返回值,只能用于独立的赋值语句 |
除了
**和++外所有的二元运算符都是左连接的.
.. 加在其他标识符前用于访问全局对象,例如 ..string 等价于 global.string。 .. 不能叠加, .. 后面不能出现空格 ,不能用于除标识符以外的表达式。参考:命名空间:: 用于创建或访问保留常量。:: 后面不能有空白,必须紧接标识符,并且保留常量的第一个字符不能是小写字母,也不能是下划线。典型的保留常量有 ::User32,::Kernel32 等对象。 参考:保留常量$ 编译时操作符,后面必须用一个双引号或反引号包含的原样字符串( raw string) 指定要包含的文件路径。aardio 在编译时会将指定的文件编译为字符串( 可包含二进制数据 )。 参考:包含操作符@ 可用在表或数组构造器内定义元表,例如 var tab = { k = v; @{ _type="object"} } 。在其他位置置于其他对象之后可以访问对象的元表,例如 time()@ 可访问时间对象的元表。请参考:元表