lua控制结构

在这个世界上取得成就的人,都努力去寻找他们想要的机会,如果找不到机会,他们便自己创造机会。

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 语句 。

image.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循环会重复执行器循环体,如果条件为假则循环结束。


image.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,517评论 0 38
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,199评论 0 17
  • if exp then end if exp then else end if exp then elseif e...
    李白太白阅读 106评论 0 0
  • 积极主动,用过心费过脑,不怕没收获。不为别的,就为增值! 要事第一,每天慎重选择,有界限的集中注意力。你的注意力决...
    零度清爽阅读 97评论 0 1
  • 鹏程展翅九万里, 宇宙遨游志凌云。 生就一身聪慧命, 日积月累具威名。 快马加鞭摘贵冠, 乐贺我家小寿星。
    喷泉阅读 441评论 2 3