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

第一部分

 

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

本部分代码下载                     http://download.csdn.net/detail/myy2012/5344692

 

lua程序设计第二版 读书笔记(1-4章)
第一章 开始
第二章 类型与值
第三章 表达式
第四章 语句
http://blog.csdn.net/myy2012/article/details/8900424

lua程序设计第二版 读书笔记(5-8章)
第五章 函数
第六章 深入函数
第七章 迭代器与泛型for
第八章 编译执行与错误
http://blog.csdn.net/myy2012/article/details/8906466

lua程序设计第二版 读书笔记(9-10章)
第九章 协同程序
第十章 完整的实例
http://blog.csdn.net/myy2012/article/details/8911206

lua程序设计第二版 读书笔记(11-14章)
第十一章 数据结构
第十二章 数据文件与持久性
第十三章 元表metatable与元方法meatmethod
第十四章 环境
http://blog.csdn.net/myy2012/article/details/8914457

lua程序设计第二版 读书笔记(15-17章)
第十五章 模块与包
第十六章  面向对象编程
第十七章 弱引用 table
http://blog.csdn.net/myy2012/article/details/8921632

lua程序设计第二版 读书笔记(18-21章)
第十八章 数学库
第十九章 table库
第二十章 字符串库
第二十一章 IO库
http://blog.csdn.net/myy2012/article/details/8925895

lua程序设计第二版 读书笔记(22-23章)
第二十二章 操作系统库
第二十三章 调试库
http://blog.csdn.net/myy2012/article/details/8930181

 

 

 

第一章

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

printtypenil))------nil

2.2 boolean(布尔)

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

printtypetrue))----boolean

2.3 number(数字)

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

printtype3.14))----number

2.4 string(字符串)

Lua中,我们可以非常方便的定义很长很长的字符串。
字符串在Lua中有几种方法来表示,最通用的方法,是用双引号或单引号来括起一个字符串的,如:"Hello "'Hello world!'

printtype“boy”))----string

printtypetype(x)))----string

2.5 table(表)

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

Lua中,你可以用任意类型来作数组的索引,除了nil。在Lua中,你也可以用任意类型的值来作数组的内容,除了nil
table的定义很简单,它的主要特征是用"{""}"来括起一系列数据元素的。比如:
tbl = {}   -- 定义一个空表

a={}

k=”x”

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

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

b=a   --ba引用了同一个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 是函数名字,ab是参数名字
return a+b -- return 用来返回函数的运行结果
end

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

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

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

第三章 表达式

3.1算术操作符

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

3.2关系操作符

<  >  <=  >=  ~=  ==

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

3.3逻辑操作符

falsenil为假,其他的为真

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   --交换 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

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

for k=0, 3, 1 do

print("k="..k)

end

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

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

泛型forgeneric 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 breakreturn

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

Return语句用于从一个函数中返回结果,或者用于简单地结束一个函数的执行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值