您的位置:首页 > 编程语言 > Lua

lua程序设计第二版 读书笔记(1-4章)

2013-05-08 15:25 537 查看
第一部分

书本下载地址 http://download.csdn.net/detail/myy2012/5349646

本部分代码下载 http://download.csdn.net/detail/myy2012/5344692
lua程序设计第二版 读书笔记(1-4章)

第一章 开始

第二章 类型与值

第三章 表达式

第四章 语句

/article/7932654.html

lua程序设计第二版 读书笔记(5-8章)

第五章 函数

第六章 深入函数

第七章 迭代器与泛型for

第八章 编译执行与错误

/article/7932655.html

lua程序设计第二版 读书笔记(9-10章)

第九章 协同程序

第十章 完整的实例

/article/7932656.html

lua程序设计第二版 读书笔记(11-14章)

第十一章 数据结构

第十二章 数据文件与持久性

第十三章 元表metatable与元方法meatmethod

第十四章 环境

/article/7932657.html

lua程序设计第二版 读书笔记(15-17章)

第十五章 模块与包

第十六章 面向对象编程

第十七章 弱引用 table

/article/7932658.html

lua程序设计第二版 读书笔记(18-21章)

第十八章 数学库

第十九章 table库

第二十章 字符串库

第二十一章 IO库

/article/7932659.html

lua程序设计第二版 读书笔记(22-23章)

第二十二章 操作系统库

第二十三章 调试库

/article/7932660.html

第一章

1.1程序块(chunk)

Lua执行的每段代码,例如一个源代码文件或在交互模式输入的一行代码,被称为一个程序块。

在这种模式中,输入的每条命令(例如 print “Hello World”)都将立即被执行。要退出交互模式和解释器,只需要输入一个end-of-file控制字符(windows7 下ctrl+c),或者输入os.exit()









1.2词法规范

Lua中的标示符是由任意字母、数字和下划线构成的字符串,但不能以数字开头。

关键字

关键字是不能做为变量的。Lua的关键字不多,就以下几个:

and break do else elseif end false for function if

in local nil not or repeat return then true until while

注释

写一个程序,总是少不了注释的。

在Lua中,你可以使用单行注释和多行注释。

单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。相当于C++语言中的"//"。

多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。这种注释相当于C语言中的"/*...*/"。在注释当中,"[["和"]]"是可以嵌套的(在lua5.1中,中括号中间是可以加若干个"="号的,如 [==[ ... ]==]),见下面的字符串表示说明。

1.3全局变量

全局变量(Global Variable)不需要声明。只需要将一个值赋予一个全局变量就可以创建了。

在lua中,访问一个未初始化的变量不会引发错误,访问结果是一个特殊的值nil。

1.4解释器程序(the dtand-slone interpreter)

涉及unix系统。

第二章 类型与值

2.1 nil(空)

正如前面所说的,没有使用过的变量的值,都是nil。有时候我们也需要将一个变量清除,这时候,我们可以直接给变量赋以nil值。如:var1=nil

print(type(nil))------nil

2.2 boolean(布尔)

布尔值通常是用在进行条件判断的时候。布尔值有两种:true 和 false。在Lua中,只有false和nil才被计算为false,而所有任何其它类型的值,都是true。比如0,空串等等,都是true。

print(type(true))----boolean

2.3 number(数字)

在Lua中,是没有整数类型的,也不需要。一般情况下,只要数值不是很大(比如不超过100,000,000,000,000),是不会产生舍入误差的。

print(type(3.14))----number

2.4 string(字符串)

在Lua中,我们可以非常方便的定义很长很长的字符串。

字符串在Lua中有几种方法来表示,最通用的方法,是用双引号或单引号来括起一个字符串的,如:"Hello "或'Hello world!'

print(type(“boy”))----string

print(type(type(x)))----string

2.5 table(表)

table 类型实现了“关联数组(associative array)”。Table没有固定的大小,可以动态的添加任意数量的元素到一个table中。Table是Lua中仅有的数据结构机制。

在Lua中,你可以用任意类型来作数组的索引,除了nil。在Lua中,你也可以用任意类型的值来作数组的内容,除了nil。

table的定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。比如:

tbl = {} -- 定义一个空表

a={}

k=”x”

a[k]=10 --新条目 key为”x” value为10

a[20]=”great” --新条目 key为20 value为”great”

b=a --b和a引用了同一个table

print(a[“x”]) --10

print(b[20]) --great

a=nil --现在只有b还在引用table

b=nil --再也没有对table的引用了

Lua对于诸如a[“name”]的写法提供了一种更简便的“语法糖”,可以直接输入a.name。

如: a={}

x=”y”

a[x]=10

print(a[x])--10

print(a.x) --nil

print(a.y) -- 10

2.6函数(function)

函数,在Lua中,函数的定义也很简单。典型的定义如下:

function add(a,b) -- add 是函数名字,a和b是参数名字

return a+b -- return 用来返回函数的运行结果

end

2.7 userdata (自定义类型)和thread(线程)

Userdata类型可以将任意的c语言数据存储到Lua变量中。

在Lua中,这种类型没有太多的预定义操作,只能进行赋值和相等性测试。

第三章 表达式

3.1算术操作符

二元的:+ - * / ^ % 一元的:-

3.2关系操作符

< > <= >= ~= ==

关系运算符的结果为true或者false

3.3逻辑操作符

以false和nil为假,其他的为真

and:第一个参数为假则为假,否则返回第二个参数

or:第一个参数为真则为真,否则返回第二个参数

not:只返回true或者false

a and b or c 等价于 a? b:c --前提b不为假

如:x>y and x or y

3.4字符串连接

要在lua中连接两个字符串,可以使用操作符”..”(两个点)。

print( “Hello”..”World”) -- Hello World

print(0..1) --01

3.5优先级

和C语言一样,括号可以改变优先级。

3.6 table构造式(table constructor)

构造式是用于创建和初始化table的表达式。

如:days={“Sunday”, “Monday”, “Tuesday”, “Wednesday”,

“Thursday”, “Friday”, “Saturday”}

print(days[1]) --Sunday

print(days[4]) --Wednesday

对于某些情况真的需要以0作为一个数组的起始索引的话,也可以构造

Days={[0]=”Sunday”, “Monday”, “Tuesday”, “Wednesday”,

“Thursday”, “Friday”, “Saturday”}

Lua还提供了一种特殊的语法用于初始化记录风格的table

A={} a.x=10 a.y=20 等价于 a={x=10, y=20}

将记录风格的初始化与列表风格的初始化混合在一个构造式中使用:

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

print(polyline[4].x) -- 0

第四章 语句

4.1赋值

赋值(assignment)的基本含义是修改一个变量或一个table中字段的值

Lua允许“多重赋值”,也就是同时将多个值赋予给多个变量。

规则:若左边个数多,则多出的变量为nil

若右边个数多,则多出的值被舍弃

a, b = 10, 20

x, y = y, x --交换 x 与y

a, b, c = 10

a, b = 10, 20, 30

4.2局部变量与块(block)

与全局变量不同的是,局部变量的作用域仅限于声明他们的那个块。

do-end 可以显示的指定块

do

x=10

local i=1

if i>20 then

local x

x=20

print(x) --20

else

print(x) --10

end

print(x) --10

end

“尽可能的使用局部变量”是一种良好的编程风格。所声明的局部变量被当做语句来处理,

因此可以在任何允许书写语句的地方书写局部变量的声明。缩小变量的作用域可以提高代码的阅读。

4.3控制结构

if then else end

if 语句先测试其条件,然后根据测试结果执行then部分,else部分是可选的。若要嵌套的if,可以使用elseif

local i=10

if i>0 then

print("i>0")

elseif i<0 then

print("i<0")

else

print("i==0")

end

while end

lua先测试while的条件,如果为假则循环结束,否则一直重复

local i=10

while i>10 do

print(i)

i=i-1

end

repeat until

一条repeat--until语句重复执行其循环体直到条件为真时结束。(循环体至少执行一次)

local i=10

repeat

print(i)

i=i+10

until i>50

数字型for (numeric for)

for do end

for和do之间有三个参数分别为:起始,终止(math.huge无上限),步长(默认为1)

for k=0, 3, 1 do

print("k="..k)

end

不要在循环过程中修改控制变量的值,否则会导致不可预测的后果。

如果想在for循环正常结束前终止循环,可以使用break跳出循环。

泛型for(generic for)

泛型for循环通过一个迭代器(iterator)函数来遍历所有值

a={"boy", "bad", "girl", "good"}

b={}

for key, value in ipairs(a) do

print(key, value)

b[value]=key --完成逆向table

end

4.4 break与return

break语句用于结束一个循环,它只会跳出包含它的那个内部循环(for repeat while)

Return语句用于从一个函数中返回结果,或者用于简单地结束一个函数的执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: