美文网首页
lua控制结构

lua控制结构

作者: 亮亮同学 | 来源:发表于2019-11-14 20:20 被阅读0次

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

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

相关文章

  • lua控制结构

    if exp then end if exp then else end if exp then elseif e...

  • lua控制结构

    在这个世界上取得成就的人,都努力去寻找他们想要的机会,如果找不到机会,他们便自己创造机会。 lua语言提供了一组精...

  • 2017.5.25

    lua学习总结:数据结构: 使用Lua实现链表(单向链表和双向链表),队列 使用Lua保存图,用table保存,每...

  • lua 5.3.4 GC的变化-UpVal变为引用计数管理

    Lua 5.1.4 Lua 5.3.4 UpVal 要注意的是: UpVal 结构中去掉了 GCObject 的通...

  • Redis+lua

    userName是zhangsan 如果有,则将lisi传入userName lua脚本 执行结果 使用Lua控制...

  • Lua 快速笔记(二) syntax

    参考programing in lua 语法 函数 常用函数 语法 局部变量和代码块 控制语句 Lua 认为 fa...

  • Lua的内存布局结构

    Lua的内存布局结构 0.Lua编译过程?1.Lua内存布局?2.内存中的状态? 我们知道每种语言都有自己的内存布...

  • tolua笔记

    LuaState●LuaState封装了对lua 主要数据结构 lua_State 指针的各种堆栈操作。●一般对于...

  • Lua 基礎知識:

    Lua 編程: 程序控制語句: 條件控制 : if 條件 then ... elseif 條件 then ......

  • 流程控制

    Lua流程控制 Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定 在条件为 true 时执行指定程...

网友评论

      本文标题:lua控制结构

      本文链接:https://www.haomeiwen.com/subject/cqqdictx.html