if 语句先测试其条件,并根据条件是否知足执行条件相应的then部分或else部分。else部分是可选的。 编程
if a < 0 then a = 0 end
if a < b then return a else return b end
if a < b then rerurn a elsif a == b then return 0 else return b end
复制代码
若是要编写嵌套的if语句可使用else-if,能够避免重复使用end lua语言不支持switch语句,因此这种一连串的else-if语句比较常见markdown
当条件为真时while循环会重复执行其循环体。lua语言先测试while语句的条件,条件为假时则循环结束。否做,lua会执行循环体并不断重复这个过程。 编程语言
local i = 1
while a[i] > 0 do
print(a[i])
i = i +1;
end
复制代码
语句会重复执行其循环体直到条件真时结束。因为条件测试在循环体以后执行,因此循环体至少会执行一次。 函数
--输出第一个非空的行 测试
local line
repeat
line = io.read()
until line ~=“”
print(line)
复制代码
和其余大多数其余编程语言不一样,在lua语言中,循环体内声明的局部变量的做用域包括测试条件 lua
#include <stdio.h>
int main(void)
{
int count = 0; //在外部块中声明
do
{
int count = 0;
++count;
printf(“count = %d\n”,count);
}while(++count <= 5);
printf(“count = %d\n”, count)
system(“pause”)
return 0;
}
复制代码
输出内容为:spa
count = 1
count = 1
count = 1
count = 1
count = 1
count = 1
count = 6
复制代码
循环测试条件中使用的count是外部块中声明的,若是使用lua则使用循环体内声明的count code
for语句有两种形式:数值型for和泛型for orm
数值型for: for var = exp1, exp2, exp3 do something end
ip
在这种循环中, var 值从 exp1变化到 exp2 前的每次循环会执行 something ,并在每次循环结束后将步长 exp3 加到 var上,第三个表达式 exp3 是可选的,若不存在,lua 语言会默认步长值为1,若是不想给循环设置上限,可使用常 math.huge: 按顺序遍历。
pairs和ipairs的区别:
键值对:table1 = {[“name”] = “tom”, [“age”] = 18, [“sex”] = “female”}
列表:table2 = {1, 2, 3};
break和return语句用于从当前的循环结构中跳出,goto语句则容许跳转到函数中的几乎任何地方。
咱们可使用break语句结束循环,该语句会中断包含它的内层循环(例如for、repeat或者while);该语句不能在循环外使用。break中断后,程序会紧接着被中断的循环继续执行。
return语句用于返回函数的执行结果或简单地结束函数的运行。全部函数的最后都有一个隐含的return,所以咱们不须要在每个没有返回值的函数最后书写return语句。
local i = 1;
while a[i] do
if a[i] == v then return i end
i = i +1
end
print(i)
复制代码
思考:a={1,2,3},v=1,那么i打印出来是什么?v=4呢?
答案:当v=1时,没法打印出i;当v=4时,打印出的i为4。
goto语句用于当前程序跳转到相应的标签处继续执行。goto的语法很是传统,即保留字goto后面紧跟着标签名。 标签名语法:标签名称先后各紧跟两个冒号,形如::name::。这个复杂的语法是有意而为的,目的是为了在程序中形目地突出这些标签。
在使用goto语句时,lua语言设置了一些限制条件:
lua语言规范中一个颇有用的细节是,局部变量的做用域终止于声明变量的代码块中的最后一个有效语句处,标签被认为是无效语句。
while some_condition do
if some_other_conditon then goto continue end
local var = something
some code
::continue::
end
复制代码
思考:这个goto语句跳转到了变量var的做用域内吗?
答案:没有,由于这个continue标签出如今该代码块的最后一个有效语句后,所以goto并未跳转进入变量var的做用域内。