3.1算术操作符
lua支持常规的算术操作符 —— + - * / ^ % -(负号)
例如 x^0.5是计算x的平方根 x^(-1/3)是计算x立方根的倒数
对于实数x,x%1的结果是x的小数部分,而x-x%1的结果是x的整数部分,x-x%0.01是精确到x小数点后两位的结果;
3.2关系操作符
lua提供的关系操作符 < > <= >= == ~=
所有这些操作符的运算结果都是true或false
== 和 ~= 可以应用于任意两个值,如果两个值具有不同的类型,它们就是不相等的;
nil只与自身相等
对于table,userdata和函数,lua是作引用比较的;也就是说只有当他们引用同一个对象时
才认为它们相等;
只能对两个数字或两个字符串作大小性比较;而数字和字符串之外的其它类型只能进行相等性或不等性比较;
当两个不同类型的值作比较时要格外小心;lua会在遇到字符串和数字的大小比较时引发一个错误;
3.3逻辑操作符
逻辑操作符有 and or 和 not
所有的逻辑操作符都将false 和 nil 视为假,而将其它的任何东西视为真;
and 和 or 都具有短路特性;
lua中常用的习惯写法有:
x = x or v
max = (x > y) and x or y
3.4字符串连接
lua中的字符串连接的操作符是".."。如果任意一个操作数是数字的话,lua会将这个数字
转换成一个字符串;
lua中的字符串是不可变的值,连接操作符只会创建一个新的字符串,而不会对其原操作
数进行任何修改;
3.5优先级(见表)
一元操作符都是右结合的,在二元操作符中除了指数操作符"^" 和 连接操作符".." 是右结合的,
所有的其它操作符都是左结合的;
3.6table构造式
构造式是用于创建和初始化table的表达式,这是lua特有的一种表达式,并且也是lua中
最有用,最通用的机制之一;
最简单的构造式就是一个空构造式{},用于创建一个空table,构造式还可以用于初始化数组;
table创建之后可以添加或删除其中的某些字段;
用table创建链表的代码:
list = nil
for line in io.lines() do
list = {next = list,value = line}
end
这段代码是从标准输入中读取每行的内容,然后将每行按相反的次序存储到一个链表中;
链表的每个节点都是一个table,table中含有两个字段:value(每行的内容) 和next(
指向下一个节点的引用)。以下代码是遍历该链表并打印:
local l = list
while l do
print(l.value)
l = l.next
end
但lua中很少会用到链表,列表数据一般通过数组来实现;
lua中的数组索引通常起始于1;
在一个构造式中,可以在最后一个元素的后面写一个逗号,这个特性是可选的,也是
合法的;还可以用分号代替逗号,这通常用于分隔构造式不同的成分,如将列表部分
与记录部分区分开;