Lua变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Lua变量三种类型:全局变量(储存在名称为_G的table中)、局部变量、table中的域
Lua中的变量全都是全局变量,即使在语句块或函数里,除非用local显式声明为局部变量
局部变量作用域与C/C++概念相同
变量默认值为nil
]]
-- test.lua文件脚本
a=1 -- 全局变量
local b=2 -- 文件内局部变量

function ()
c=5 -- 全局变量
local d=6 -- 局部变量
end

rua()
print(c,d) --输出:5 nil

do
local a=6 -- 局部变量,这里局部变量覆盖了全局变量,引用外部全局变量时可以用_G.a来引用,类似于C/C++的::a
b=6 -- 对局部变量重新赋值
print(a,b) -- 输出:6 6
end

print(a,b) -- 输出:5 6

赋值语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 赋值可以改变一个变量的值和表域
a="hello" .. "world"
t.n=t.n+1
-- 可以对多个变量同时赋值
a,b=10,2*x -- a=10,b=2*x
-- 赋值语句会先计算右边所有的值,然后再执行赋值操作
-- 交换变量写法
x,y=y,x

变量和值个数不一致:
变量个数>值的个数 按变量个数补足nil
变量个数<值的个数 多余的值被忽略
]]
a,b,c=0
print(a,b,c) -- 输出:0 nil nil

索引

1
2
3
4
-- table的索引使用方括号[]和点.的操作
t[i]
t.i -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用

Lua循环

while循环

1
2
3
while(condition) do
-- do something
end

数值for循环

1
2
3
4
-- var从exp1变化到exp2,每次变化以exp3为步长,可选,不指定默认为1
for var=exp1,exp2,[exp3] do
-- do something
end

泛型for循环

1
2
3
4
5
-- 相当于foreach
a={"a","b","c"}
for i,v in ipairs(a) do
print(i,v)
end

repeat…until循环

1
2
3
4
-- 相当于C/C++的do...while
repeat
-- do something
until(condition)

break语句

1
2
3
4
-- Lua仅支持break,不支持continue,同其他语言
while(condition) do
break
end

Lua流程控制

if语句

1
2
3
if(condition) then
-- do something
end

if…else语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 两条分支
if(condition) then
-- do something
else
-- do something
end

-- 多条分支
if(condition1) then
-- do something
elseif(condition2) then
-- do something
else
-- do something
end