变量
Lua中变量分为全局变量、局部变量、table
中的域。如果不用local
显式声明,即使是在函数内部的变量,仍然是全局变量。如:
function myfun()
a=1 --全局变量
print("a="..a.."创建了!")
end
myfun() --不过函数中的变量显然要调用过这个函数才会创建
local b=2 --局部变量
c={"啊","嗯嗯"}
c[2]="呵呵" --table域
print("a="..a..",b="..b..",c[2]="..c[2])
输出:
a=1创建了!
a=1,b=2,c[2]=呵呵
多变量赋值
Lua支持多变量赋值,支持赋值号左右数目不一致(以左侧为准)。如:
a=1;
b=2;
c=3;
--轮换a,b,c的值
a,b,c=b,c,a;
print(a.." "..b.." "..c);
--这样会编译错误
--[[
a,b,c=1,2;
print(a.." "..b.." "..c);
]]--
--5,6都被忽略
a,b=3,4,5,6;
print(a.." "..b.." "..c);
输出:
2 3 1
3 4 1
Lua中可以省略语句结尾的分号,就像之前那样。大部分时候肯定是喜欢简洁的形式,有的地方又为了结构清晰严谨需要打上分号,可以混着来用。
table索引
对table
的索引(table变量[key名]
)实际是在调用一个底层的函数来获取索引值。当key是string
类型时,获取还可以写成table变量.key名
的形式。如:
lzh={}
lzh["age"]=21
print(lzh["age"])
print(lzh.age) --不用带引号
输出:
21
21
各类循环
while循环
格式:
while(condition)
do
statements
end
标准for循环
格式:
--三个表达式只在for启动前求值一次
for 变量=初始值(表达式),退出值(表达式),步长(表达式,省略则为1) do
statements
end
如:
function myfun()
return 3
end
--在启动前求值得myfun()-1为2
for i=5,myfun()-1,-1 do
print(i)
end
输出:
5
4
3
2
迭代器for循环
上篇中使用过了pairs()
函数来得到一个table
变量的迭代器,除此之外还可以使用ipairs()
函数来遍历,两者有些不同,网上找到了一种解读:
pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil。
ipairs不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key。
如:
a={"第一个","第二个"}
a["three"]="第三个"
a[4]="第四个"
--pairs
for k,v in pairs(a) do
print(k..":"..v)
end
print()
--ipairs
for k,v in ipairs(a) do
print(k..":"..v)
end
输出:
1:第一个
2:第二个
4:第四个
three:第三个
1:第一个
2:第二个
repeat-until循环
格式:
repeat
statements
until(condition)
很多编程语言都没有在语法层面实现这种循环,它完全可以被其它循环代替掉。但有时候用它可以让逻辑上更清楚。