1.逻辑运算符
and, or , not
and:只有第一个参数为false,返回第一个参数;第一个参数为真,返回第二个参数。
or:只有第一个参数为true,返回第一个参数;否则,返回第二个参数。
--if not x then x=v end
x=x or v
上述表达式:如果x为false,则x被赋值为v。
a and b or c
--类似于c语言中的a?b : c
max = (x>y) and x or y
not运算符返回true或者false。
print(not nil) -->true
print(not false) -->true
print(not 0) -->false
print(not not nil) -->false
2.字符串拼接
使用两个点"…"进行字符串拼接。
a = "Hello"
print(a.." World") -->Hello World
print(a) -->Hello
3.运算符优先级
所有二目运算符都是左关联,除了指数运算符以及字符串连接符是右关联。
a+i < b/2+1 <---> (a+i) < ((b/2)+1)
5+x^2*8 <---> 5+((x^2)*8)
a < y and y<=z <---> (a<y) and (y<=z)
-x^2 <---> -(x^2)
x^y^z <---> x^(y^z)
4.表创建
--简单表的创建
days = {"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"}
print(days[4]) -->Wednesday
也可以这样:
a={x=0,y=0}
--也可以写成这样
a={}; a.x=0;a.y=0
观察下面的这个例子:
w= {x=0,y=0,label="console"}
x = {sin(0),sin(1),sin(2)}
w[1]= "another field"
x.f= w
print(w["x"]) -->0
print(w[1]) -->another field
print(x.f[1]) -->another field
w.x = nil --> remove field "x"
使用table创建一个连接list:
list = nil
for line in io.lines() do
list = {next=list, value=line}
end
由于我们的list类似栈,因此下列程序将会逆序打印:
l = list
while l do
print(l.value)
l = l.next
end
更为复杂的表结构:
polyline = {color="blue", thickness=2, npoints=4,
{x=0, y=0},
{x=-10, y=0},
{x=-10,y=1},
{x=0, y=1}
}
print(polyline[2].x) -->-10
--其中polyline[1],polyline[2] is a table representing a record.
表结构:
{x=0,y=0}
-- is equivalent to
{["x"]=0, ["y"]=0}
---
{"red", "green", "blue"}
--is equivalent to
{[1]="red", [2]="green", [3]="blue"}
结尾加上一个逗号是合法的,如下所示:
a = {[1]="red", [2]="green",}
也可以使用分号代替逗号,如下:
{x=10,y=45;"one","two","three"}