今天继续第三章的学习:

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)没有关系。