lua可以像c一样,几乎支持所有的传统的赋值语句、流程控制语句、函数调用等,同时也支持非传统的多变量赋值语句、局部变量声明等。
赋值语句:
可以使用传统的赋值语句,或者是lua支持的值格式,如:
a ="hello" .. " world" b = 1 print(a) -->hello world print(b) -->1
lua支持对多个变量的赋值,在语句中,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋值给左边的变量。如果变量数量不足,会丢弃多余的值。如果值数量不足,会将多余的变量赋值为nil。如:
a, b, c = 10, 6 print(a) -->10 print(b) -->6 print(c) -->nil注意:多变量赋值的时候,lua解释器会先计算右侧的值,然后依次赋给左侧的变量。利用这个特性,可以很方便的完成变量值交换,如:
a, b = 10, 6 print(a) -->10 print(b) -->6 a, b = b, a print(a) -->6 print(b) --10注意: 如果要对多个变量赋值必须依次 对每个变量赋值。比如,将a,b,c都设置为0,下面的写法是错误的:
a, b, c = 0这样的结果是:a = 0, b =nil, c =nil.
必须是下面这种写法:
a, b, c = 0, 0, 0多变量赋值,多用来进行值交换,或是接收函数返回值。
a, b = f()函数f()返回两个结果,第一个返回给a, 第二个返回给b。
局部变量和代码块(Block):
可以使用local来声明一个局部变量,局部变量只在当前的代码块中有效。一个代码块可以是一个控制流程,一个chunk或是一个函数。如:
function f() local tmp = 10 print(tmp) end f() -->tmp = 10 print(tmp) --> nil对tmp的赋值只在f()函数内部有效,在这个函数执行完后,tmp的值为nil。
结构控制语句:
在lua中,控制语句中的条件可以是任何值或表达式,只有当为false或是nil时,才认为是假的,否则均认为是真。
if语句有三种形式:
if conditions then then-part end; if conditions then then-part else else-part end; if conditions then then-part elseif conditions then elseif-part .. --->多个 elseif else else-part end;while语句的形式:
while condition do statements; end;repeat-until语句的形式:
repeat statements; until conditions;if和while语句基本上与C语言的差不多,只不过是写法上有些差别。repeat-until相当于do-while语句。
for循环语句的形式:
for var=exp1,exp2,exp3 do loop-part endexp1为开始值,exp2为终止值,exp3为步长,如果exp3不存在,则以1为默认步长。
注意:for内的第三个参数,最终形式都必须是可得到的值,如果是表达式也必须可计算才行,不能是nil。如果这三个变量时最新定义的变量,则使用域只在for循环内部。如:
for i = 0,b,1 do print(i) end以上的代码会报错,因为b为nil,不能被正确解释,三个参数都必须是可计算的值才行。
b = 10 for i = 0,b do print("i = " .. i) end print(i)以上代码中,for后面只有两个参数,未指明步长,默认步长就是1。另外,局部变量i的作用域是for循环内部,一旦for循环执行完成,i 就被删除了,所以最终的打印结果为:
i = 0 i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 i = 9 i = 10 nil
注意:如果exp1、exp2、exp3为表达式,则这三个表达式只会在循环前被执行一次,不会每次循环都重新计算。如:
a = 10; b = 8 for var = (a + 2), a + b, a - b do <span style="white-space:pre"> </span>a = a + 2 <span style="white-space:pre"> </span>b = b + 3 <span style="white-space:pre"> </span>print("var=" .. var .. " a=" .. a .. " b=" .. b) end执行结果为:
var=12 a=12 b=11 var=14 a=14 b=14 var=16 a=16 b=17 var=18 a=18 b=20通过以上函数,可以看出,for循环的三个表达式,只在循环前被执行了一次。没有随着a、b值得改变而重新计算。
i = 1 for i, 10, 2 do print(i) end必须改成:
i = 1 for var = i, 10, 2 do print(var) end
泛型for循环:
lua中,泛型for循环通过lua库提供的迭代器函数来遍历所有值,类似java中的foreach语句。注意:泛型for循环只能用于数组型table
形式为:
for i,v in ipairs(a) do print(v) end其中 i 为数组a的键值,v 为数组a内元素的值。如:
a = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"} for i,v in ipairs(a) do print("a[" .. i .. "]" .. " = " .. v) end执行结果为:
a[1] = Suanday a[2] = Monday a[3] = Tuesday a[4] = Wednesday a[5] = Thursday a[6] = Friday a[7] = Saturday
a = {x = 1, y = 2, z = 3}