1,lua简介
Lua 是一个小巧的脚本语言。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。很多应用程序使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括魔兽世界、博德之门、愤怒的小鸟等。
http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.html
2,lua名言
在Lua中,一切都是变量,除了关键字。
3,lua语法
3.1 注释
3.1.1 单行注释
单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。相当于C++语言中的"//"。
3.1.2 多行注释
多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。这种注释相当于C语言中的"/*…*/"。在注释当中,"[["和"]]"是可以嵌套的。
3.2 语句结构
3.2.1 语句分隔
在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开。一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。
3.2.2 语句块
在Lua中,语句块是用do 和 end 括起来的;而在C中是用"{"和"}"括起来的。3.3 控制语句
3.3.1 if语句
3.3.2 while语句
3.3.3 repeat语句
3.3.4 for语句
注意一下,for的循环变量总是只作用于for的局部变量;当省略步进值时,for循环会使用1作为步进值。
使用break可以用来中止一个循环。
使用break可以用来中止一个循环。
3.4 赋值语句
赋值语句在Lua被强化了。它可以同时给多个变量赋值。
在默认情况下,变量总是认为是全局的。假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。
3.5 运算符号
3.5.1 数值运算符号
在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
符号 | 含义 |
and | a and b:如果a为false,则返回a;否则返回b |
or | a or b:如果 a 为true,则返回a;否则返回b |
not | 非 |
我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c。
最有用的语句是: x = x or v,它相当于:if not x then x = v end 。
3.6 变量
3.6.1 关键字
关键字是不能做为变量的。
and
break
do
else
elseif
end false for function if
in local nil not or
repeat return then true until while
end false for function if
in local nil not or
repeat return then true until while
3.6.2 变量类型
可以用type()函数来检查变量类型。Lua支持的类型有以下几种:
类型 | 说明 |
Nil | 空值,所有没有使用过的变量,都是nil。nil既是值,又是类型。 |
Boolean | 布尔值,只有两个有效值:true和false |
Number | 数值,在Lua里,数值相当于C语言的double |
String | 字符串,如果你愿意的话,字符串是可以包含"\0"字符的(这和C语言总是以"\0"结尾是不一样的) |
Table | 关系表类型,这个类型功能比较强大,请参考后面的内容。 |
Function | 函数类型,不要怀疑,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。 |
Userdata | 这个类型专门用来和Lua的宿主打交道的。 宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针。 |
Thread | 线程类型,在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。 |
关于字符串String:
示例:下面的语句所表示的是完全相同的字符串:
关于转义字符。在Lua中,可以用另一种表示方法:用"[["和"]]"将多行的字符串括起来。(lua5.1: 中括号中间可以加入若干个"="号,如 [==[ ... ]==],详见下面示例)。值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"
"或"
"来避免歧义。当然,这种情况是极少会发生的。
关于关系表类型Table:
关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是C语言的数组,只能用正整数来作索引;在Lua中,你可以用任意类型来作数组的索引,除了nil。同样,在C语言中,数组的内容只允许一种类型;在Lua中,你也可以用任意类型的值来作数组的内容,除了nil。
Table的定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。
函数也是变量类型吗?上面的函数定义,其实相当于:
返回多个值: