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
View Code

 

posted @ 2013-11-13 21:34  丿聪丶  阅读(254)  评论(0)    收藏  举报