• 循环与选择


    Lua提供以下类型的循环来处理循环需求。

    编号

    循环类型

    描述

    1

    while循环

    在给定条件为真时重复语句或语句组,它在执行循环体之前测试条件。

    2

    for循环

    多次执行一系列语句,并缩写管理循环变量的代码。

    3

    repeat…unti循环

    重复语句组的操作,直到满足until条件。

    4

    嵌套循环

    可在任何循环中使用另一个或多个循环,如:while,fordo..while循环。

    循环控制声明

    循环控制语句从正常顺序改变执行。 当执行离开作用域时,将销毁在该作用域中创建的所有自动对象。

    Lua支持以下控制语句。

    编号

    控制语句

    描述

    1

    break语句

    终止循环并将执行转移到循环或switch之后的语句。

    无限循环

    如果条件永远不会变为假,则循环变为无限循环。 while循环通常用于此目的。如果直接给出了一个条件为真,它就会永远执行。可以使用break语句来打断这个无限循环。

    while( true )do
       print("This loop will run forever.")end

    Lua编程语言假定布尔truenon-nil值的任意组合为true,如果它是布尔falsenil,则假定为false值。 需要注意的是,在Lua中,零将被视为true

    Lua编程语言提供以下类型的决策制定语句 -

    编号

    决策语句

    描述

    1

    if语句

    if语句由布尔表达式后跟一个或多个语句组成。

    2

    if…else语句

    if语句后面可以跟一个可选的else语句,该语句在布尔表达式为false时执行。

    3

    嵌套if语句

    在一个ifelse if语句中使用另一个ifelse if语句。

    Lua中的控制结构

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

    if a < 0 then a = 0 end
    if a < b then return a else return b end
    if line > MAXLINES then
        showpage()
        line = 0end

     

    若要编写嵌套的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 = 1 while a[i] do
        print(a[i])
        i = i + 1 end

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

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

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

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

    4. 数字型fornumeric 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=1,f(x) do print(i) endfor i=10,1,-1 do print(i) end

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

    for i=1,math.huge do
        if (0.3*i^3 - 20*i^2 - 500 >= 0) then
            print(i)
            break
        End end

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

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

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

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

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

    Lua 编程语言中 for 循环语句可以重复执行指定语句,重复次数可在 for 语句中控制。

       Lua 编程语言中 for语句有两大类:数值for循环,  泛型for循环

    数值for循环

        for var=exp1,exp2,exp3 do 

            <执行体>  

        end 

        var从exp1变化到exp2,每次变化以exp3为步长递增var,并执行一次"执行体"。exp3是可选的,如果不指定,默认为1。

    实例

        for i=1,f(x) do

            print(i)

        end

        

        for i=10,1,-1 do

            print(i)

        end

        for的三个表达式在循环开始前一次性求值,以后不再进行求值。比如上面的f(x)只会在循环开始前执行一次,其结果用在后面的循环中。

       验证如下:

        #!/usr/local/bin/lua 

        function f(x) 

            print("function") 

            return x*2  

        end 

        for i=1,f(5) do print(i) 

        end

       以上实例输出结果为:

        function

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

    泛型for循环

        泛型for循环通过一个迭代器函数来遍历所有值,类似java中的foreach语句。Lua 编程语言中泛型for循环语法格式:

        --打印数组a的所有值 

        for i,v in ipairs(a)

            do print(v)

        end 

       i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。

    实例

        #!/usr/local/bin/lua 

        days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"} 

        for i,v in ipairs(days) do  print(v) end 

        以上实例输出结果为:

        Suanday

        Monday

        Tuesday

        Wednesday

        Thursday

        Friday

        Saturday

  • 相关阅读:
    4.运算符&if条件控制
    欢迎进入软件构建的世界
    Linux是什么
    计算机概论
    Java基础11集合(2)
    基础06-存储过程和函数,流程控制结构,变量
    基础05-常见约束,tcl事物控制语言,视图,标识列
    基础04-联合查询,dml语言,ddl语言
    基础03-子查询,分页查询
    基础00-随笔里的数据来源(库,表数据)
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/10962729.html
Copyright © 2020-2023  润新知