在这个世界上取得成就的人,都努力去寻找他们想要的机会,如果找不到机会,他们便自己创造机会。
lua语言提供了一组精简且常用的控制结构包括用于条件执行的if 以及用于循环的while,repeat 和for .所有的控制结构语法上都有一个显式的终结符:end用于终结 if ,for及 while结构 until用于终结repeat.
注意:控制结构的条件表达式的结果可以是任何值, lua将所有不是false 和nil的值当做真(lua语言将0和空字符串 ""也当做真 )
1,if 语句
if 语句 由一个布尔表达式作为条件判断,其后紧跟其他语句组成。
if 语句 可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码。
你可以在if 或 else if中使用一个或多个 if 或 else if 语句 。
![](https://img.haomeiwen.com/i2888297/7234c4e81e22969c.png)
伪代码示例:
if 条件表达式 then
满足该条件要做的事情
elseif 条件表达式 then
满足该条件要做的事情
else
要做的事情
end
代码示例
--如果 a等于b 输出 ”a 等于 b“ 要么如果 a等于c 那么 输出 “a 等于 c” 要么输出 “a 没有对应值”
local a ,b , c = 1,2,3
if a == b then
print("a 等于 b")
elseif a == c then
print("a 等于 c")
else
print("a 没有对应值")
end
注意:该语句有if ,elseif 必须加 then
----------循环语句-------------
2,while循环语句
当条件为真时while循环会重复执行器循环体,如果条件为假则循环结束。
![](https://img.haomeiwen.com/i2888297/707d6c33946b07a6.png)
伪代码:
while 条件表达式 do
要做的事情
end
代码示例
当条件变量 I 大于等于10的时候 终止循环,要么 I一直累加
打印1到10的数字
local I= 10
-------------代码a
while I< 10 do
-------------代码b
I = I + 1
print(I)
-----------
end
输出结果:
2
3
4
5
6
7
8
9
10
3,for循环(数值型)
for 语句有两种形式,数值型for 和泛型for
数值型for的语法如下
for var = exp1,exp2,exp3 do
something
end
在这种循环中,var(变量)的值从exp1增加到exp2 每次增加都会循环执行something。每循环后将步长exp3(var每次增加值)增加到var上,直到var等于exp2循环结束
注意:var是局部变量 作用域是 整个for循环内部
第三个表达式是可选的,如果不存在,lua会默认步长为1 也就是每个循环var递增1。
示范代码:
--两个表达式的例子:
默认步长是1 每次循环 n都会+1一直到 n 小于等于10 终止循环
--打印1-10的数字
for n = 1 ,10 do
print(n)
end
--输出结果:
1
2
3
4
5
6
7
8
9
10
--三个表达式的例子:
默认步长是2 每次循环 n都会+2一直到 n 小于等于10 终止循环
--打印1-10所以奇数
for n =1,10,2 do
print(n)
en
--输出结果
1
3
5
7
9
--错误的代码示例
lua中不可以这样写 ,只能根据语法格式来写
local a = 1
for a,10 do --lua会认为 缺少变量名
a = a+1
end
print (a)
--嵌套for循环
当执行嵌套for循环时 遵循先里后外的顺序 先执行完最里面的for循环 然后外层循环变量增加步长再次执行内循环
代码:
local num = 2
local num1 = 2
for k = 1,num do
print("k == "..k)
for I = 1,num1 do
print("I == ",I)
end
end
--->
k == 1
I == 1
I == 2
k == 2
I == 1
I == 2
--执行了num次 外循环 每执行一次外循环 都会执行 num1次内循环
迭代器
迭代器(iterator)是一种对象,它能够用来遍历容器中全部元素,每个迭代器对象代表容器中的确定的地址。
在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。每次调用函数时 函数都会返回集合中的下一个元素
泛型for 迭代器
语法结构
1,ipairs
for key,value,in ipairs(table) do
--dosomething
end
--[[
key 数组索引变量(键),value 索引对应的元素(值),ipairs:迭代器函 数 返回 数组下一个 元素(值)和 索引(键),table数组(表)。
注意:每进行一次循环 ipairs都会返回 下一个元素和 该元素的索引 直到元素为nil 停止循环。因此如果数组中有空值,ipairs不一定能完全遍历整个数组
]]
代码:
--数组中有nil(空值) ipairs不能遍历该数组所有元素 遇到nil结束循环
local array = {1,2,nil,3 }
for k,v in ipairs(array) do
print(v)
end
---结果 1 2
2, pairs
与ipairs语法一致
for key,value,in ipairs(table) do
--dosomething
end
--[[
不同之处是: pairs()迭代器 会遍历整个数组,直到数组末尾才会停止
]]
代码:
--数组中有nil(空值) ipairs不能遍历该数组所有元素 遇到nil结束循环
local array = {1,2,nil,3 }
for k,v in pairs(array) do
print(v)
end
---结果 1 2 3
repeat
repeat-untile 语句会重复执行其循环体,直到条件为真时结束,由于条件判断会在循环体之后执行,所以循环至少会执行一次
--输出第一个非空的行
local num = 2
repeat
num = num^2
print(num)
until num>10
---->4 16
break
break语句用于结束循环,该语句只作用于当前循环语句块
代码:
local num = 10
local cur = 0
for i = 1 ,num do
if i == 8 then
cur = i
break
else
print(i)
end
end
print("----------分割线-------------")
print(cur)
--当i == 8时 跳出for循环程序继续执行 并打印分割线 和cur值,要么 打印i的当前值
return
返回语句,用于返回函数的执行结果或简单的结束函数的运行。
所有的函数最后都有一个隐藏的return,因此不必显示书写此语句,除非需要 根据条件 中断某语句 或者返回需要的值。
return 只能放在代码块中最后一句。或者可以说 它只能在end,else,和until之前的最后一句
--打印I的值 当I等于5时 终止程序
local I = 0
while I < 10 do
I = I + 1
if I == 5 then
print("return")
return
else
print(I)
end
end
结果:
1
2
3
4
return
cocos2d-x技术群:117871561
网友评论