今天继续第三章的学习:
3. Expressions
1)算数运算符: + - * / ^(幂)
2)关系运算符: > < >= <= == ~=(不等于)
对于tables, userdata, functions 只有两者表示的对象相等,他们相等(就像c中的指针指向同一个位置,这两个指针比较时才相等)如:
a = {}; a.x = 1; a.y = 0;
b = {}; b.x = 1; b.y = 0
c = a
则 c == a 但 a ~=b
另,不同类型的变量尽量不要拿来比较,容易引起错误。
3)逻辑运算符: and or not
lua 中的 逻辑运算符含义和c等语言中的差别比较大:
a and b --如果a 为false, 则返回a,否则返回b (4 and 5 --> 5)
a or b --如果a为true,则返回a,否则返回b (4 or 5 --> 4)
not a --如果a为true,则返回false,否则返回true (not 0 -->false)
另,lua中只有nil和false的逻辑值为false,其他值都为true
c语言中的 a?b:c, 在Lua中可以表示为 (a and b) or c
4)连接运算符:
.. 用于连接两个字符串 ("ab".."cd" --> "abcd")
5)优先级:
a) ^
b) not -(unary)
c) * /
d) + -
e) ..
f) < > <= >= ~= ==
g) and
h) or
6)table的结构
day = {1,2,3,4,5,6} --> day[1] = 1; day[2] = 2; ........; day[6] = 6
注意,在默认情况下,table的index值是从1开始,而不像c中从0开始
table也可以自己设定Index的内容,数字字符串皆可
day = {["x"] = 1, ["y"] = 2, 3,4,5} --> day.x = 1; day.y = 2; day[1] = 3; day[2] = 4; day[3] = 5
注意,在没有明确指出Index的值(上例中的3,4,5),他们的Index编号也从1开始顺序标记,和特定指的Index(上例中的想,y)没有关系。