连猴子都能学会的Lua速成教学

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并没有花括号,甚至小括号都用的少,所以一般控制作用域的正是thenend这两个关键字

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, ornot、字符串连接符(..)
注意Lua不支持++、–、+=、-=、*=等

猜你喜欢

转载自blog.csdn.net/qq_32418469/article/details/81450673