Lua入门

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 语句块

[python]  view plain  copy
  1. do print("Hello") end  
在Lua中,语句块是用do 和 end 括起来的;而在C中是用"{"和"}"括起来的。

3.3 控制语句

3.3.1 if语句

[python]  view plain  copy
  1. -- if 条件 then ... elseif 条件 then ... else ... end  
  2. if 1+1=2 then print("true")  
  3. elseif 1+2~=3 then print("true")  
  4. else print("false") end  

3.3.2 while语句

[python]  view plain  copy
  1. -- while 条件 do ... end  
  2. while 1+1~=2 do print("true") end  

3.3.3 repeat语句

[python]  view plain  copy
  1. -- repeat ... until 条件  
  2. repeat print("Hello") until 1+1~=2  

3.3.4 for语句

注意一下,for的循环变量总是只作用于for的局部变量;当省略步进值时,for循环会使用1作为步进值。
使用break可以用来中止一个循环。

[python]  view plain  copy
  1. -- for 变量=初值, 终点值, 步进 do ... end  
  2. for i = 1102 do print(i) end  
  3.   
  4. -- for 变量1, 变量2, ... 变量n in 表或枚举函数 do ... end  
  5. for a,b in mylist do print(a, b) end  

3.4 赋值语句

赋值语句在Lua被强化了。它可以同时给多个变量赋值。

[python]  view plain  copy
  1. a,b,c,d=1,2,3,4  --分别赋值  
  2. a,b=b,a  -- 多么方便的交换变量功能啊<span style="font-family: Arial, Helvetica, sans-serif;">    </span>  

在默认情况下,变量总是认为是全局的。假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。

[python]  view plain  copy
  1. local a,b,c = 1,2,3  -- a,b,c都是局部变量  

3.5 运算符号

3.5.1 数值运算符号

符号含义
+加法
-减法
*乘法
/除法
^乘方
..字符串拼接,如:"This a " .. "string." -- 等于 "this a string"

3.5.2 比较运算符号

符号含义
<小于
>大于
<=小于等于
>=大于等于
==等于
~=不等于

3.5.3 逻辑运算符号

在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
符号含义
anda and b:如果a为false,则返回a;否则返回b
ora or b:如果 a 为true,则返回a;否则返回b
not
在Lua中这是很有用的特性,也是比较令人混洧的特性。
我们可以模拟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

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:
示例:下面的语句所表示的是完全相同的字符串:
[python]  view plain  copy
  1. a = 'alo\n123"'  
  2. a = "alo\n123\""  
  3. a = '\97lo\10\04923"'  
  4. a = [[alo  
  5. 123"]]  
  6. a = [==[  
  7. alo  
  8. 123"]==]  
字符串是用双引号或单引号来括起一个字符串的。
关于转义字符。在Lua中,可以用另一种表示方法:用"[["和"]]"将多行的字符串括起来。(lua5.1: 中括号中间可以加入若干个"="号,如 [==[ ... ]==],详见下面示例)。值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"
""
"来避免歧义。当然,这种情况是极少会发生的。

关于关系表类型Table:
关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是C语言的数组,只能用正整数来作索引;在Lua中,你可以用任意类型来作数组的索引,除了nil。同样,在C语言中,数组的内容只允许一种类型;在Lua中,你也可以用任意类型的值来作数组的内容,除了nil。
Table的定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。
[python]  view plain  copy
  1. T1 = {}  -- 定义一个空表  
  2. T1[1]=10  -- 然后我们就可以象C语言一样来使用它了。  
  3.   
  4. T1["John"]={Age=27, Gender="Male"}  
  5. 这一句相当于:  
  6. T1["John"]={}  -- 必须先定义成一个表,还记得未定义的变量是nil类型吗  
  7. T1["John"]["Age"]=27  
  8. T1["John"]["Gender"]="Male"  
  9. 当表的索引是字符串的时候,我们可以简写成:  
  10. T1.John={}  
  11. T1.John.Age=27  
  12. T1.John.Gender="Male"  
  13. 或  
  14. T1.John{Age=27, Gender="Male"}  

关于Function:
[python]  view plain  copy
  1. function add(a,b)  -- add 是函数名字,a和b是参数名字  
  2.        return a+b  -- return 用来返回函数的运行结果  
  3. end  
请注意,return语言一定要写在end之前。假如我们非要在中间放上一句return,那么就应该要写成:do return end。
函数也是变量类型吗?上面的函数定义,其实相当于:
[python]  view plain  copy
  1. add = function (a,b) return a+b end  
当重新给add赋值时,它就不再表示这个函数了。我们甚至可以赋给add任意数据,包括nil (这样,赋值为nil,将会把该变量清除)。Function是不是很象C语言的函数指针呢?

返回多个值:
[python]  view plain  copy
  1. function s()  
  2. <span style="white-space:pre">  </span>return 1,2,3,4  
  3. end  
  4. a,b,c,d = s()  -- 此时,a = 1, b = 2, c = 3, d = 4  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值