3.4 表达式语句
Lua支持与其他大多数编程语言类似的编程语句,包括赋值语句、控制语句、函数调用语句等。函数调用在上文已有介绍,此处着重分析赋值语句和控制语句。
3.4.1 赋值语句
赋值是改变一个变量的值和表域的最基本方法。Lua可以同时对多个变量进行赋值。语法定义是等号左边放一个变量列表,等号右边放一个表达式列表,各个元素之间使用逗号分隔开。赋值语句右边的值会赋给左边的变量。Lua程序在执行过程中遇到赋值语句会先计算右边的值,然后根据右边的值执行赋值操作。赋值过程中可能会遇到两种情况。第一种情况:当左边变量的个数大于右边值的个数时,Lua程序会依次进行赋值。没有值与之变量对应时,默认为其赋值nil。最终左边变量都有一个值。第二种情况:当左边变量的个数小于右边值的个数时,Lua程序会依次进行赋值,并弃掉右边多余的值。示例代码如下:
>> a,b,c,d = 1,2,3,4 > print(a,b,c,d) 1 2 3 4 > a,b,c,d,e = 1,2,3 > print(a,b,c,d,e) 1 2 3 nil nil > a,b,c = 1,2,3,4,5 > print(a,b,c) 1 2 3
3.4.2 控制语句
大多数编程语言中包含控制语句,Lua也不例外。下面详细介绍Lua语言中控制语句的使用方法,并给出一些示例,供读者参考。
1.条件判断语句
if语句由一个布尔表达式作为条件判断。当布尔表达式为true时,if语句中的代码块会被执行;当布尔表达式为false时,紧跟在if语句end之后的代码会被执行。示例参考代码清单3-6。
程序清单3-6 条件判断语句示例
> a = 100 --> 定义变量 > if(a == 10) --> 检查布尔条件 >> then >> print("a的值为10") >> elseif(a == 20) --> 检查布尔条件 >> then >> print("a的值为20") >> elseif(a == 30) --> 检查布尔条件 >> then >> print("a的值为30") >> else --> 检查布尔条件 >> print("没有匹配a的值") >> end 没有匹配 a 的值 > print("a的真实值为: ", a) --> 打印a的真实值 a 的真实值为: 100
2.for循环语句
for循环语句可以通过语句中的参数来重复执行指定语句。在Lua语言中,for循环分为两种,数值for循环与泛型for循环。
·数值for循环:通过一个数学运算符不断地运行for语句内部中的代码块。
·泛型for循环:通过一个迭代器函数来遍历所有值,类似Java中的foreach语句。
代码清单3-7显示了使用for循环语句打印0到30之间的素数。
程序清单3-7 for循环语句示例
> -- 打印0到30之间的素数及素数个数 > offVar = 0 > endVar = 30 > primevar = 0 > for number = offVar,endVar >> do >> isPrime = true >> for i = 2,number-1 do >> if(number%i == 0)then >> isPrime = false >> else >> end >> end >> if(isPrime)then >> primevar = primevar + 1 >> print(number.."为素数") >> end >> end 0为素数 1为素数 2为素数 3为素数 5为素数 7为素数 11为素数 13为素数 17为素数 19为素数 23为素数 29为素数 > print("素数总数为:"..primevar) 素数总数为:12
3.while语句
在Lua语言中,只要循环条件为真,while语句就会一直执行,直到循环条件为假。示例参考代码清单3-8。该示例使用while语句打印区间[0,10)内的数字。
程序清单3-8 while语句示例
> -- 打印区间[0,10)内的数字 > a=0 > while(a < 10) >> do >> print("a的值为:", a) >> a = a+1 >> end a 的值为: 0 a 的值为: 1 a 的值为: 2 a 的值为: 3 a 的值为: 4 a 的值为: 5 a 的值为: 6 a 的值为: 7 a 的值为: 8 a 的值为: 9
4.repeat语句
与for、while语句不同,repeat语句会在代码块执行结束后再进行条件判断。代码清单3-9相较于代码清单3-8会多打印数字10。
程序清单3-9 repeat语句示例
> -- 打印区间[0,10]内的数字 > a=0 > repeat >> print("a的值为:", a) >> a = a + 1 >> until(a > 10) a的值为: 0 a的值为: 1 a的值为: 2 a的值为: 3 a的值为: 4 a的值为: 5 a的值为: 6 a的值为: 7 a的值为: 8 a的值为: 9 a的值为: 10
5.break & goto语句
break语句用来结束while、repeat或for循环。它将跳到循环外接着运行或者跳出最内层的循环。示例参考代码清单3-10。
程序清单3-10 break & goto语句
> -- 打印区间[0,5]内的数字 > a = 0 > while(a < 10) >> do >> print("a的值为:", a) >> a=a+1 >> if(a > 5) >> then >> break --> 使用 break 语句终止循环 >> end >> end a的值为: 0 a的值为: 1 a的值为: 2 a的值为: 3 a的值为: 4 a的值为: 5
goto语句将程序的控制点转移到标签处。Lua中的标签也被认为是语句。Lua支持goto语句,但是有一定的局限性,具体如下。
1)不能从块外部跳到块内部。
2)不能跳出或者跳入一个函数。
3)不能跳入本地变量的作用域。
由于goto语句在实际中不常用,此处不做详细介绍。