区别,表达式中可包含函数定义和table构造式。
算术操作符
区别,提供^操作符作为指数操作符,x^2表示x的平方。
lua中的%,如有 a%b,得到的结果的符号总是与b相同。如-3%2得1。
关系操作符
区别:~= 是 != 。关于==与~=,类型不同直接不同,类型相同再基于类型比较,nil只与nil相同。
对于userdata,table,function,存储它们的变量是作为引用比较的:
a= {}; a.x = 1;
b= {}; b.x = 1;
c= a;
上述a/b/c,只有a == c,而a ~= b,
只能对两个number/string作大小比较,string大小比较根据区域设置来进行。其它类型只能进行相等性或不等性比较。
逻辑操作符and or not ,对于and,如果操作数1为假,就返回第1个操作数,不然返回第2个操作数,对于or来说,如果它的第一个操作数为真,就返回第一个操作数,否则返回第2个操作数。and和or都是短路求值。
not只返回true 或 false
字符串连接符,之前讲过 “..”注意是两个点,且lua不能改变字符串,所以该操作符返回一个新的字符串。
优先级——老话,乘除大于加减,其它加上括号。要知道就算你分得清,其他人可能分不清。
table构造器,常用方法有两种:
列表初始化方法:a = {"one","two"} -->相当于a[1] = "one" ;a[2] ="two"
a= {hello = "world"} -->相当于 a["hello"]= "world"
每当遇到构造式,lua都会建立一个新的table,然后执行构造式,因此,lua可以很简单地创建链表:
list= nil
forline in io.lines() do
list= {next = list , value = line} -->创建一个新的链表,执行构造式,再把
-->新链表赋给list,注意这是按返方向构造链表
end
我们可以把两种初始化风格混合在一起使用:
polyline= {color = "blue",thickness = 2,npoints = 4,
{x = 0, y = 0},
{x = -10 ,y = 0}}
另有一种更强大的构造式:
opnames= { ["+"] = "add" , ["-"] = "sub"}
这种方法甚至可以把运算符及负数作为索引。
构造式中可以用分号来代替逗号。