Lua语言是游戏开发的一个重要助手,是一种比较流行的脚本语言,在国内也有像鹅厂这样的大厂在做维护和支持(xLua等),质量是很能得到保证的。它体积小速度快,是一种很优秀的语言。
Lua速成
1.注释
①Lua的注释是以两个”-“开始的,例如:
-- This is a comment
②同时也存在着块注释(多行注释),使用的是两个方括号,例如:
--[[
This is a single comment
that takes multiple lines.
--]]
2.变量
Lua是一种动态类型语言,所以可以通过给变量赋值新内容来改变其类型:
x = 3 -- integer
x = 3.14 -- float
x = "PI" -- string
Lua 能识别八种类型:
(1) 数字 number
(2) 字符串 string
(3) 布尔值 Boolean
(4) 表 table
(5) 函数 function
(6) 空类型 nil
(7) 用户自定义数据 userdata
(8) 线程 (重点)
以上的类型中除了一般意义上的变量,还有些奇怪的东西,这说明了Lua中是可以直接给变量赋值成为函数这类奇怪东西的!
1.1 nil值
Lua 的 nil 与 C++ 的 NULL 在概念上是相同的,但是他们的行为是有所不同的。 大多数编译器都将NULL编译为0。但在Lua中,nil没有任何值,它只有一个类型。
1.2 作用域
Lua的变量也具有作用域,但是与大多数编程语言不同的是,Lua变量默认的作用域是全局。所以即使你在if中声明一个变量,它仍然是全局变量。如果想定义局部变量,则用local关键字:
local x = 10 --这是一个局部变量
3.函数
Lua中的函数是用function来声明的,使用end来表示结束,没有花括号哦~~~
具有两种表示方法,两种方法的效果是相同的
表示方法一:
function Square(val)
return val*val
end
表示方法二:
Square = function(val)
return val*val
end
其实可见方法二是一种赋值方法,这意味着函数也可以被赋值给其他对象:
x = Square
现在x就指向相同的函数了
函数可以返回多个值,用逗号”,”隔开:
function MultiReturn()
return 2, 4
end
x,y = MultiReturn(); -- x获得2,y获得4
它亦可以用来重写所有函数,包括Lua的系统函数,厉害了:
oldprint = print; -- 保存原有系统函数,这很重要
print = function(string)
local newString = "Lua"..string -- 两个"."表示字符串的连接
oldprint(newString)
end
4.表
表是Lua中基本(也可说是唯一)的数据结构,基本上什么都能堆放在表中,最简单的表结构:
prime = { 2, 3, 5, 7, 11}
print(prime[2]) -- 打印结果是3,注意,是3!
注:由此可见,Lua的索引是从1开始的!!!!!!!!!!!!!
超自由的索引:
表的索引并不是只能用数字,这只是默认值,实际上什么都能作为索引:、
messyTable = {} -- 声明一个空表
messyTable["string"] = 20 -- string类型的索引,引导出了一个int值
messyTable["another string"] = data -- string类型的索引,引导出了一个string值
-- 你甚至还能搞来一个函数当索引
Function X() end -- 一个空的函数
messyTable[x] = anotherTable -- 一个函数索引,引导出了另一个表
-- 你还可以把所有东西有的没的都杂在一起写,一下两种创建的表结果相同,访问方式也有两种
v1 = { ["x"] = 13.5, ["y"] = 1, ["z"] = 15.4 }
print(v1["x"]) -- 打印13.5
v2 = { x = 13.5, y = 1, z = 15.1}
print(v2.x) -- 打印13.5
table表:
Lua提供的一个特殊表,它包含一系列辅助函数,包括:
函数名 | 功能 |
---|---|
insert() | 插入元素 |
remove() | 从表中删除元素 |
getn() | 返回表中数组的部分元素 |
setn() | 设置表数组部分的元素个数 |
maxn() | 通过执行一次O(n)搜索来返回表的最大正数索引 |
sort() | 对表的数组部分进行排序 |
concat() | 将表中的元素连接在一起来形成一个字符串 |
可以说Lua通过表来达到面向对象的效果
5.流程控制
Lua并没有花括号,甚至小括号都用的少,所以一般控制作用域的正是then与end这两个关键字
5.1 if语句
结构:
if exp then
-- do something
else if exp2 then
-- do something else
else
-- otherwise, do this other thing
end
5.2 while语句
结构:
i = 5
while i > 0 do
print(i)
i = i-1
end
5.3 for语句
for语句比较特殊,在Lua中有两种形式
第一种,数字形式:
for i = 1, 10, 1 do
-- do something
end
需要注意的是,10代表**小于等于**10!!!!!
并且10后面的1可以省略,因为Lua默认给变量增加1
第二种,一般形式:
这是一种遍历的方法,具体见下:
prime = = { 2, 3, 5, 7, 11}
for index, value in ipairs(prime) do
print(index, value) -- 键,值
end
6.操作符
Lua提供了很多操作符,它们大多与主流语言相同,有几个比较特殊:
幂(^)、不等于(~=)、逻辑运算符and, or 和 not、字符串连接符(..)
注意Lua不支持++、–、+=、-=、*=等