【Lua学习笔记】2:变量,多变量赋值,table索引,各类循环

变量

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

输出:

扫描二维码关注公众号,回复: 2255604 查看本文章
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)

很多编程语言都没有在语法层面实现这种循环,它完全可以被其它循环代替掉。但有时候用它可以让逻辑上更清楚。

猜你喜欢

转载自blog.csdn.net/shu15121856/article/details/81088688