LUA程序设计第一章-第五章
2013年11月5日来到的公司,第一天的任务就是看《LUA程序设计》前五章,然后用LUA写个快速排序。下面简单的做一下笔记。
第一章 开始
1.词法规范
LUA中的标示符可以是由任意字母、数字和下划线构成的字符串,但不能以数字开头。LUA严格区分大小写,例:and≠And≠AND
行注释: -- 块注释: --[[ ...... ]]
2.全局变量
全局变量不需要声明。只需要将一个值赋予一个全局变量就可以创建了,在LUA中访问一个未初始化的变量不会引发错误,结果是一个值nil。
第二章 类型与值
1.nil(空)
nil是一种类型,它只有一个值,主要功能用于区别其他任何值,是一种无效值。
2.boolean
LUA将false和nil视为假。
3.number
number类型用于表示实数,LUA没有整数类型。
4.string
在一个字符串上应用算数操作时,LUA会将这个字符串换成一个数字。例:print("10" + 1) --> 11
5.table
table类型实现了“关联数组”,是一种具有特殊索引方式的数组,认为是一种动态分配的对象,程序仅持有一个对它们的引用(或指针)。a.x 等同于a["x"] 表示以字符串"x"来索引table,a[x]是以变量x的值来索引table,数组通常以1作为索引的起始值。长度操作符"#"用于返回一个数组或线性表的最后一个索引值(或为其大小)。
1 --打印所有行 2 for i = 1, #a do 3 print(a[i]) 4 end 5 6 print(a[#a]) -- 打印列表a的最后一个值 7 a[#a] = nil -- 删除最后一个值 8 a[#a+1] = v -- 将v添加到列表末尾
6.function
LUA中,函数式作为“第一类值”来看待的,这表示函数可以存储在变量中。LUA既可以调用以自身LUA语言编写的函数,又可以调用以C语言编写的函数
第三章 表达式
1.算数操作符
x%1 的结果就是x的小数部分
x-x%1 x的整数部分
x-x%0.01 将x精确到小数点后两位的结果
2.关系操作符
> < >= <= == ~=(不等)
如果两个值具有不同的类型,LUA就认为它们是不相等的。nil只与其自身相等。
对于table、userdata和函数,LUA是作引用比较的,也就是只有当它们引用同一个对象时,才认为相等。
a={}; a.x = 1; a.y = 0
b={}; b.x = 1; b.y = 0
c = a
结果: a == c , 但 a~=b
3.逻辑操作符
and or not
and:如果它的第一个操作数为假,就返回第一个操作数;不然返回第二个操作数。
or:如果它的第一个操作数为真,就返回第一个操作数;不然返回第二个操作数。
max = (x > y) and x or y 类似于 a?b:c
4.字符串连接
要在LUA中连接两个字符串,可以使用操作符".." ,如果其任意一个操作数是数字的话,LUA就会将这个数字转换成一个字符串。
5.优先级
"^"和".." 是右结合的。 x^y^z <--> x^(y^z)
6.table构造式
空构造式 {}
初始化数组 days = {"Sunday", "Monday", "Tuesday"} days[1]等于"Sunday"
a = {x = 10, y = 20} <--> a={}; a.x = 10; a.y = 20;
第四章 语句
1.赋值
LUA允许多重赋值 a, b = 10, 2*x a为10 ,b为2*x 在多重赋值中,LUA先对等号右边的所有元素求值,然后才进行赋值。
x, y = y, x -- 交换x与y
LUA总会将等号右边值的个数调整到与左边变量的个数相一致。若值的个数少于变量个数,那么多余的变量会被赋值为nil,多的话,多余的值会被丢掉。
2.局部变量与块
通过local语句来创建局部变量
3.控制结构
if、for、和while以end作为结尾 , if ... then ...else LUA不支持switch语句
while .... do ... end
repeat ...until...
for var = exp1, exp2,exp3 do
...
end -- var 从exp1变化到exp2,每次变化都以exp3作为步长递增var。exp3可选的,不指定,默认步长为1。
泛型for: for k , v in pairs(a) do ... end
第五章 函数
... 东西比较杂。先不写了,下面把很搓的qsort先贴出来:
1 -------------------------------------------------------------------------- 2 -- 快速排序程序 3 -- @author 王聪 4 -------------------------------------------------------------------------- 5 function foo(a , l , r) 6 --for i , v in ipairs(a) do print(v) end 7 local i, j, x 8 i = l 9 j = r 10 x = a[i] 11 --print(i , j , a[i]) 12 if l < r then 13 while i < j do 14 while i < j and a[j] > x do 15 j = j - 1 16 end 17 if i < j then 18 a[i] = a[j] 19 i = i + 1 20 end 21 while i < j and a[i] < x do 22 i = i + 1 23 end 24 if i < j then 25 a[j] = a[i] 26 j = j - 1 27 end 28 end 29 a[i] = x 30 foo(a , l , i - 1) 31 foo(a , i + 1 , r) 32 end 33 end 34 -- 49, 38, 65, 97, 76, 13, 27 35 a = { 36 [1] = 49, 37 [2] = 38, 38 [3] = 65, 39 [4] = 97, 40 [5] = 76, 41 [6] = 13, 42 [7] = 27 43 } 44 foo(a , 1 , 7) 45 for i , v in ipairs(a) do print(v) end

浙公网安备 33010602011771号