Lua变量
--[[
Lua变量三种类型:全局变量(储存在名称为_G的table中)、局部变量、table中的域
Lua中的变量全都是全局变量,即使在语句块或函数里,除非用local显式声明为局部变量
局部变量作用域与C/C++概念相同
变量默认值为nil
]]
-- test.lua文件脚本
a=1 -- 全局变量
local b=2 -- 文件内局部变量
function rua()
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
赋值语句
-- 赋值可以改变一个变量的值和表域
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
索引
-- table的索引使用方括号[]和点.的操作
t[i]
t.i -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用
Lua循环
while循环
while(condition) do
-- do something
end
数值for循环
-- var从exp1变化到exp2,每次变化以exp3为步长,可选,不指定默认为1
for var=exp1,exp2,[exp3] do
-- do something
end
泛型for循环
-- 相当于foreach
a={"a","b","c"}
for i,v in ipairs(a) do
print(i,v)
end
repeat...until循环
-- 相当于C/C++的do...while
repeat
-- do something
until(condition)
break语句
-- Lua仅支持break,不支持continue,同其他语言
while(condition) do
break
end
Lua流程控制
if语句
if(condition) then
-- do something
end
if...else语句
-- 两条分支
if(condition) then
-- do something
else
-- do something
end
-- 多条分支
if(condition1) then
-- do something
elseif(condition2) then
-- do something
else
-- do something
end