一,Lua变量
1.lua变量的三种类型:全局变量,局部变量,表中的域
Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。
变量的默认值均为 nil。
如: a=5 -- 全局变量
local b = 5 --局部变量
在函数里:
function demo()
c = 5 --全局变量
local d = 5 -- 局部变量
2.变量赋值
a = "hello".."world"
b = 1
。。。。
Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。
a, b = 10, 2 <--> a=10; b=2
遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值:
x, y = y, x 交换赋值 -- swap 'x' for 'y'
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
1. 变量个数 > 值的个数 按变量个数补足nil 2. 变量个数 < 值的个数 多余的值会被忽略
如: a, b, c = 0, 1 print(a,b,c) --> 0 1 nil
a, b = 1,2, 3 -- 3将被忽略 print(a,b) --> 1 2
多值赋值经常用来交换变量,或将函数调用返回给变量:
a, b = function()
f()返回两个值,第一个赋给a,第二个赋给b。
应该尽可能的使用局部变量,有两个好处:
1. 避免命名冲突。
2. 访问局部变量的速度比全局变量更快。
二,循环
1.while循环: 在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
语法: while(condition) do statements end
如:
a=10 while( a < 20 ) do print("a 的值为:", a) a = a+1 end
2.for循环: 重复执行指定语句,重复次数可在 for 语句中控制。
(1).一般for循环
语法:
for var=exp1,exp2,exp3 do <执行体> end
var从exp1变化到exp2,每次变化以exp3为步长递增var,并执行一次"执行体"。exp3是可选的,如果不指定,默认为1。
function f(x) print("function") return x*2 end for i=1,f(5) do print(i) end
(2).泛型for循环
语法: for i,v in ipairs(a) do print(v) end
i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。
pairs 用来迭代字符数组。
3.repeat...until循环
语法:
repeat statements until( condition )
--[ 变量定义 --] a = 10 --[ 执行循环 --] repeat print("a的值为:", a) a = a + 1 until( a > 15 )
循环条件判断语句(condition)在循环体末尾部分,所以在条件进行判断前循环体都会执行一次。
4.循环嵌套
(1).Lua 编程语言中 for 循环嵌套语法格式:
for init,max/min value, increment do for init,max/min value, increment do statements end statem ents end
(2).Lua 编程语言中 while 循环嵌套语法格式:
while(condition) do while(condition) do statements end statements end
(3).Lua 编程语言中 repeat...until 循环嵌套语法格式:
repeat statements repeat statements until( condition ) until( condition )
5.无线循环,俗称死循环,以while为列:
while( true ) do print("循环将永远执行下去") end
三,流程控制
1.if
控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。
语法:
(1).if
if(布尔表达式) then --[ 布尔表达式为 true 时执行该语句块 --] end
(2)if-else
if(布尔表达式) then --[ 布尔表达式为 true 时执行该语句块 --] else --[ 布尔表达式为 false 时执行该语句块 --] end
(3) if-else-if-else
if( 布尔表达式 1) then --[ 在布尔表达式 1 为 true 时执行该语句块 --] elseif( 布尔表达式 2) then --[ 在布尔表达式 2 为 true 时执行该语句块 --] elseif( 布尔表达式 3) then --[ 在布尔表达式 3 为 true 时执行该语句块 --] else --[ 如果以上布尔表达式都不为 true 则执行该语句块 --] end