Lua提供了一组传统的、小巧的控制结构,包括用于条件执行的if,用于迭代的while、repeat和for。所有的控制结构都有意个显式的终止符:if、for和while以end作为结尾,repeat以until作为结尾。
1. if then else

if a <  then a =  end

if a < b then return a else return b end

if line > MAXLINES then
showpage()
line =
end

若要编写嵌套的if,可以使用elseif。

if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a * b
elseif op == "/" then
r = a / b
else
error("invalid operation")
end

由于Lua不支持switch语句,所以这种一连串的if-else if代码很常见。

2. while
Lua先测试while的条件。如果条件为假,那么循环结束;不然,Lua执行循环体,并重复这一过程。

local i =
while a[i] do
print(a[i])
i = i +
end

3. repeat
一条repeat-until语句重复执行其循环体直到条件为真时结束。测试是在循环体之后做的,因此循环体至少会执行一次。

-- 打印输入的第一行不为空的内容
repeat
line = io.read()
until line ~= ""
print (line)

与其他大多数语言不同的是,在Lua中,一个声明在循环体中的局部变量的作用于包括了条件测试:

local sqr = x/
repeat
sqr = (sqr + x/sqr)/
local error = math.abs(sqr^ - x)
until error < x/ -- 在此仍可访问error

4. 数字型for(numeric for)
for循环有两种形式:数字型for(numeric for)和泛型for(generic for)。
数字型for的语法如下:

for var=exp1,exp2,exp3 do
<执行体>
end

var从exp1变化到exp2,每次变化都以exp3作为步长(step)递增var,并执行一次“执行体”。第三个表达式exp3是可选的,若不指定的话,Lua会将步长默认为1。以下是这种循环的一个典型示例:

for i=,f(x) do print(i) end
for i=,,- do print(i) end

如果不想给循环设置上限的话,可以使用常量math.huge:

for i=,math.huge do
if (0.3*i^ - *i^ - >= ) then
print(i)
break
end
end

5.泛型for(generic for)
泛型for循环通过一个迭代器(iterator)函数来遍历所有值:

-- 打印数组a的所有值
for i,v in ipairs(a) do print(v) end

Lua的基础库提供了ipairs,这时一个用于遍历数组的迭代其函数。在每次循环中,i会被赋予一个索引值,同时v被赋予一个对应于该索引的数组元素值。下面是另一个类似的示例,演示了如何遍历一个table中所有的key:

-- 打印table t中所有的key
for k in pairs(t) do print(k) end

标准库提供了几种迭代器,包括:
    用于迭代文件中每行的(io.lines);
    迭代table元素的(pairs);
    迭代数组元素的(ipairs);
    迭代字符串中单词的(string.gmatch)等。

最新文章

  1. .Net 转战 Android 4.4 日常笔记(10)--ADT集成环境更新SDK
  2. POJ1679 The Unique MST[次小生成树]
  3. 170104、js内置对象与原生对象
  4. STL —— STL六大组件
  5. fastjson和json-lib的区别
  6. 【转】Winform下KeyDown,KeyPress,KeyUp事件的总结
  7. flv视频播放器代码
  8. POJ2492 A Bug&#39;s Life 带权并查集
  9. WPF非轮询方式更新数据库变化SqlDependency(数据库修改前台自动更新)
  10. 前端框架Bootstrap - 快速搭建网站
  11. leetcode 224. Basic Calculator 、227. Basic Calculator II
  12. redis的list取出数据方式速度测试
  13. HTML5_canvas_线性渐变
  14. mongodb内嵌文档的javaapi,增删改查
  15. rem : web app适配的秘密武器
  16. 5月9日——vue渲染过程中{{xxx}}显示
  17. Linux驱动程序:统计单词个数
  18. 21.5.3 Updatable and Insertable Views
  19. 转载:移动端+微信小程序实现,手机端滑动分页代码思路(ajax)
  20. 一、SDWebImage分析--库处理流程分析

热门文章

  1. 初试PyOpenGL一 (Python+OpenGL)
  2. [原创]Allegro 导入DXF文件,保留布好的线路信息
  3. FrameBot 软件安装测试
  4. 本地没问题 服务器 提示 Server Error in &#39;/&#39; Application
  5. C# where用法解析
  6. C# 获取Image图片格式
  7. cocos2d - CCSprite各种动画
  8. 理解端口与IP
  9. js 历史
  10. (asp)JScript读写、复制、移动文件 asp也就那回事(4)