赞
踩
变量在使用前,需要在代码中进行声明,即创建该变量。
编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。
Lua 变量有三种类型:全局变量、局部变量、表中的域。
Lua 中的变量全是全局变量,哪怕是语句块或是函数里,除非用 local 显式声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。
变量的默认值均为 nil。
#!/usr/local/bin/lua
a = 1 -- 全局变量
local b = 2 -- 局部变量
function fun()
c = 3 -- 全局变量
local d = 4 -- 局部变量
end
fun()
print(c, d) -- 3 nil
do
local a = 5 -- 局部变量
b = 6 -- 对局部变量重新赋值
print(a, b) -- 5 6
end
print(a, b) -- 1 6
赋值是改变一个变量的值和改变表域的最基本的方法。
Lua 可以对多个变量同时赋值。
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
#!/usr/local/bin/lua
a = 1
b = "ABC"
print(a, b) -- 1 ABC
a = a + 1
b = "A" .. "BCD"
print(a, b) -- 2 ABCD
c, d = 1, "2" .. "3"
print(c, d) -- 1 23
a, b = 1, 2, 3
print(a, b) -- 1 2
a, b, c = "A", "B"
print(a, b, c) -- A B nil
应该尽可能的使用局部变量,有两个好处:
对 table 的索引:[]
、 .
t[i]
t.i -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用
Lua 语言提供了以下几种循环处理方式:
i = 10
while(i >= 1)
do
print(i)
i = i - 1
end
Lua 编程语言中 for语句有两大类:
数值for循环
泛型for循环
1. 数值for循环
for var = exp1, exp2, exp3 do
<执行体>
end
var 从 exp1 变化到 exp2,每次变化步长为 exp3(默认1)。
function fun(x)
return x - 1
end
x = 3
for i = 1, fun(x) do print(i)
for的三个表达式在循环开始前一次性求值,以后不再进行求值。
2. 泛型for循环
泛型 for 循环通过一个迭代器函数来遍历所有值。
a = {1, 2, 3}
for i, v in ipairs(a) do print(i, v) end
repeat…until 循环的条件语句在当前循环结束后判断。 (do-while)
x = 3
repeat
print(x)
x = x - 1
until(x == 0) -- 条件为真才会停止!!!
三种循环都可以相互嵌套
Lua 支持以下循环控制语句:
x = 3
repeat
print(x)
x = x - 1
if (x == 1) then break end
until(x == 0)
运行结果:
3
2
Label: ::Label::
local a = 1
::label:: print("--- goto label ---")
a = a + 1
if a < 3 then
goto label -- a 小于 3 的时候跳转到标签 label
end
方法一,在循环的内部再嵌入一层循环:
table = {1, 2, 3, 4, 5}
for i = 1, #table do
while true do -- 内层循环
if table[i] % 2 == 0 then
break
end
print(table[i])
break -- 正常逻辑也需要break,否则会进入死循环
end
end
方法二,使用goto语句:
table = {1, 2, 3, 4, 5}
for i = 1, #table do
if table[i] % 2 == 0 then
goto continue
end
print(table[i])
::continue::
end
方法三,使用repeat语句:
table = {1, 2, 3, 4, 5}
for i = 1, #table do
repeat
if table[i] % 2 == 0 then
break
end
print(table[i])
until true
end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。