Lua学习笔记(二)

来源:互联网 发布:mac删除酷我程序 编辑:程序博客网 时间:2024/06/08 10:14

3.表达式
3.1 算数表达式
二元运算符:+-*/^
一元运算符:-(负值)
3.2 关系运算符
< > <= >= == ~=
==和~=比较两个值,如果两个值类型不同,Lua认为两者不同,nil只和自己相等。
这里写图片描述
3.3 逻辑运算符
and or not
逻辑运算符认为false和nil是假,其他为真
and和or的运算结果不是true和false,而是和他两个操作的数值有关。
a and b – 如果a为false,则返回a,否则返回b
a or b – 如果a为true,则返回a,否则返回b
这里写图片描述
如果x为false或者nil就给x赋初始值
x = x or v
等价于
if not x then
x =v
end
C语言中的三目运算符
a?b:c
Lua中
(a and b)or c
not的结果只返回true或者false
not nil – true
not 2 – false
3.4 连接运算符
..
这里写图片描述
3.5 优先级
从高到低
^
not -
* /
+ -
..
< > <= >= ~= ==
and
or
3.6 表的构造
表最简单的构造函数是{},用来创建一个空表,可以直接初始化数组
这里写图片描述
a = {x=0, y=0} <–> a = {}; a.x=0; a.y=0
不管用何种方式创建table,我们都可以向表中添加或删除任何类型的域,构造函数仅仅影响表的初始化
这里写图片描述
每次调用构造函数Lua都会创建一个新的table,可以使用table构造list
list = nil
for line in io.lines() do
list = {next=list, value=line}
end
下面这段代码从标准输入进行读取每行,然后反序形成链表
这里写图片描述
在同一个构造函数中可以混合列表风格和 record 风格进行初始化,如:
这里写图片描述
上面两种构造函数的初始化方式还有限制,比如你不能使用负索引初始化一个表中
元素,字符串索引也不能被恰当的表示。下面介绍一种更一般的初始化方式,我们用
[expression]显示的表示将被初始化的索引:
这里写图片描述
list的风格初始化和record风格初始化是这种一般初始化的特例:
{x=0, y=0} <–> {[“x”]=0, [“y”]=0}
{“red”, “green”, “blue”} <–>{[1]=”red”, [2]=”green”, [3]=”blue”}
注意:不推荐数组下标从 0 开始,否则很多标准库不能使用。
在构造函数的最后的”,”是可选的,可以方便以后的扩展。
a = {[1]=”red”, [2]=”green”, [3]=”blue”,}
在构造函数中域分隔符逗号(”,”)可以用分号(”;”)替代,通常我们使用分号用来
分割不同类型的表元素。
{x=10, y=45; “one”, “two”, “three”}
未完待续…

2 0