Programmming in Lua学习笔记(边学边更新ing。。。)

Programmming in Lua学习笔记(边学边更新ing。。。)

Programmming in Lua学习笔记

author:阵雨 2005年11月17日2:34:46

第0章 序言

Lua所提供的机制是C不善于的:高级语言、动态结构、简洁,易于测试和调试。
正因为如此,Lua具有良好的安全保证,自动内存管理,简便的字符串处理功能
以及其他动态数据的改变。
Lua具有可扩展、简单、高效、跨平台的特点。

第 1 章  起点

一个Chunk可以是一个语句,也可以是一系列语句的组合,还可以是函数,Chunk可以很大,在Lua中几个Mbyte的Chunk
是很常见的。

全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始值的全局
变量也不会出错,只不过的得到的结果是:nil。
如果想删除一个全局变量,只需要将变量赋值为 nil.


第 2 章 类型和值

每个语句结尾的分号 ';' 是可选的,但是如果同一行有多个语句最好用' ; '来将其隔开

Lua是动态类型语言,变量不要类型定义。lua中有8种基本类型分别为:

nil ,boolean ,number, string,userdata,function,thread,table

变量没有预定义的类型,每一个变量都可能包含任一种类型的值,例如:

print (type(a))   --> nil ( ' a '   is   not  initialized)
a
= 10
print (type(a))   --> number
a
= " a string "
print (type(a))   --> string
a
= print    --> yes ,this  is  valid!
a(type(a)) 
--> function

我们可以使用function像使用其它值一样使用

Nil 
Lua中特殊的类型,它只有一个值:nil,一个全局变量没有被赋值以前默认值为nil

Booleans 两个取值 false 和 true ,但要注意Lua中 “所有的值”都可以用作为条件,在控制结构的
条件中除了false 和 nil 为假,其它值都为真,所以Lua认为0和空串都是真.

Lua的字符串可以包含任何数值的字符,包括嵌入的0,这意味着你可以存储任意的二进制数据在一个字符串里面。
字符串是不可以修改的,你可以创建一个新的变量来存储你要的字符串
Lua可以高效率的处理长字符串,1M大小的string在Lua中是常见的。
可以用单引号或者双引号来表示字符串 a="a lien" ,b='another line'
转义字符与C语言相同。
可以在字符串中使用\ddd (ddd为三位十进制数字) 方式来表示字母
还可以使用[[ ...]]来表示字符串,这种形式的字符串可以包含多行,也可以嵌套,
而且不会解释转移字符,如果第一个字符是换行符会被自动忽略掉,这种形式的字符串
用来包含一段代码是非常方便的
运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术
操作符时,string会被转换成数字
尽管字符串和数字可以自动转换,但是两者是不同的,比如 10 ~= "10".

Lua通过引用比较tables userdata functions ,也就是说当且仅当两者表示同一个对象时
他们才相同,nil只和nil相等。如果两个值类型不同,Lua则认为他们不同


第 3 章 表达式

and 和 or 的运算结果不是true或者false,而是和它的两个操作数相关.
a and b  a or b  按照C语言的逻辑运算顺序计算,a、b两个表达式,计算到哪一个就返回哪一个的值
例如:a && b 如果 a为false,那么无须计算b 即可知表达式为false
所以 a and b的结果是如果a为false,则返回a,否则返回b

一个很实用的技巧,x = x or v
C语言中的 a ? b:c 等价于Lua中的 (a and b) or c

运算符的优先级(可惜没有位运算):

  ^
 
not   - (unary)
 
*   /
 
+   -
 ..
 
<   >   <=   >=   ~=   ==
 
and
 
or

除了^和 .. 之外所有的二元运算符都是左连接的。

Lua中的表可以用字符串和数字作为index,如tt={name="table",["size"]=2,[3]="number"}
如果不使用数字表达式,Lua则自动从数字 1 开始作为index,如tt={"table",2} 那么tt[1]=="table,tt[2]==2
在构造函数中,域分隔符逗号(,)是可以用分号(;)替代的,通常我们用分号来分割不同类型的表元素。如:
tt={x=10,y=45 ; "one","two","three"}
The syntax var.NAME is just syntactic sugar for var["NAME"]:

你可能感兴趣的:(Programmming in Lua学习笔记(边学边更新ing。。。))