Lua中变相实现continue跳出循环

Lua 里没有 continue 这个关键词,有时候挺不方便,可能导致循环里的 if-then 嵌套比较深。

但我们可以用一个小技巧来实现同等功能:

代码如下:

for i = 1, 100 do
    while true do
        if i % 2 == 1 then break end

-- 这里有一大堆代码
        --
        --
        break
    end
end

在这个例子中,当 i % 2 == 1 时,就会实现 continue 的效果。

这种写法的好处是在循环体较为复杂时,可以很清晰的看到什么时候直接跳到循环尾部了。

(0)

相关推荐

  • Lua中的for循环和迭代器的秘密探究

    上一篇我们介绍了,可以使用for循环来完成迭代器的调用,十分简洁. 那么,具体这for循环做了什么呢?我当然没有去看源码,我只是看书而已. 资料来源于<Lua程序设计>第二版,如果这本书的内容没有错的话,那么,本篇文章理论上也不会有错~ 1.返回两个值的迭代器 pairs是能遍历table的key和value的,而我们之前写的dieDaiQi函数只能返回value. 所以,我们要改改dieDaiQi函数,如下: 复制代码 代码如下: function dieDaiQi(t)     local

  • Lua中的repeat...until循环语句使用教程

    与for和while循环不同,在循环的顶部测试循环条件,Lua编程语言的repeat...until 循环检查循环底部的状态. repeat...until 循环类似于while循环,不同的是do ... while循环是保证至少执行一次. 语法 Lua编程语言repeat...until循环的语法是: 复制代码 代码如下: repeat    statement(s) until( condition ) 注意的是,条件表达式出现在循环结束,所以在循环语句(S)执行一次之前的条件进行测试. 如

  • Lua中数字for循环实例

    看以下代码: 复制代码 代码如下: for i=1,2 do    print(i)    i=3  end 输出是什么?如果习惯了C/C++语言,会觉得因为改变了控制变量i为3,所以在执行第二次循环体之前判断不通过,所以输出是1. 但结果输出是1和2,即虽然改变了i,但循环还是执行了2次.这是为什么呢? 看了lua的源代码,发现在语法分析阶段,表达式中的i(也叫控制变量)和循环体中的i并不是一个值,其实表达式中的i叫internal index,循环体中的i叫external index. 所

  • Lua中变相实现continue跳出循环

    Lua 里没有 continue 这个关键词,有时候挺不方便,可能导致循环里的 if-then 嵌套比较深. 但我们可以用一个小技巧来实现同等功能: 复制代码 代码如下: for i = 1, 100 do     while true do         if i % 2 == 1 then break end -- 这里有一大堆代码         --         --         break     end end 在这个例子中,当 i % 2 == 1 时,就会实现 cont

  • 浅析JavaScript中break、continue和return的区别

    break function myBreak() { for(var i = 0; i < 5; i++) { if(i == 3) { break; } console.log(i); } } myBreak(); 输出: 0 1 2 break: 直接跳出 当前 的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试.它只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出. continue function myContinue()

  • python中break、continue 、exit() 、pass终止循环的区别详解

    python中break.continue .exit() .pass区分 1.break:跳出循环,不再执行 Python break语句,就像在C语言中,打破了最小封闭for或while循环. break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句. break语句用在while和for循环中. 如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码. 例1: break跳出while死循环 ```python wh

  • JavaScript中break、continue和return的用法区别实例分析

    本文实例讲述了JavaScript中break.continue和return的用法区别.分享给大家供大家参考,具体如下: break 停止了这个for循环,跳出循环来继续执行fn函数里之后的语句  function fn() { for(var i = 0; i < 5; i++) { if(i == 3) { break; } console.log(i); } console.log("ha") } fn();//0 1 2 ha continue 只是停止了当前循环,继续

  • Lua中基本的数据类型、表达式与流程控制语句讲解

    1. Lua类型 1.1 基本类型 Lua是一种动态类型语言,没有类型定义的语法.Lua一共有8种基础类型:nil(空).boolean(布尔).number(数字).string(字符串).userdata(自定义类型).function(函数).thread(线程).table(表). 函数type可根据一个值返回其类型名称(字符串),如print(type(print)),输出"function":print(type(type(X))) ,输出"string"

  • 解析Lua中的全局环境、包、模块组织结构

    模块就是一个程序库,而包是一系列模块.Lua中可以通过require来加载模块,然后得到一个全局变量表示一个table.Lua将其所有的全局变量保存在一个被称为"环境"的常规table中.本文首先介绍环境的一些实用技术,然后介绍如何引用模块及编写模块的基本方法. 1. 环境 Lua将环境table保存在一个全局变量_G中,可以对其访问和设置.有时我们想操作一个全局变量,而它的名称却存储在另一个变量中,或者需要通过运行时的计算才能得到,可以通过value = _G[varname]来获得

  • 深入解读Lua中迭代器与泛型for的使用

    泛型for原理 迭代器是一种可以遍历集合中所有元素的机制,在Lua中通常将迭代器表示为函数,每调用一次函数,就返回集合中"下一个"元素.每个迭代器都需要在每次成功调用之间保持一些状态,这样才能知道它所在的位置及如何步进到下一个位置,closure就可以完成此项工作.下面的示例是列表的一个简单的迭代器: function values(t) local i = 0 return function() i = i + 1; return t[i] end end 循环调用: t = {10

  • Lua中函数与面向对象编程的基础知识整理

    函数 1. 基础知识 调用函数都需要写圆括号,即使没有参数,但有一种特殊例外:函数若只有一个参数且参数是字面字符串或table构造式,则圆括号可有可无,如dofile 'a.lua',f{x=10, y=20}. Lua为面向对象式的调用提供冒号操作符的特殊语法,如o.foo(o, x)等价于o:foo(x).和Javascript类似,调用函数时提供的实参数量可以与形参数量不同,若实参多了则舍弃,不足则多余的形参初始化为nil. 1.1 多重返回值 Lua允许函数返回多个结果,函数返回如ret

  • Lua中的变量类型与语句学习总结

    1. Lua类型 1.1 基本类型 Lua是一种动态类型语言,没有类型定义的语法.Lua一共有8种基础类型:nil(空).boolean(布尔).number(数字).string(字符串).userdata(自定义类型).function(函数).thread(线程).table(表). 函数type可根据一个值返回其类型名称(字符串),如print(type(print)),输出"function":print(type(type(X))) ,输出"string"

  • Lua中调用C++函数示例

    Lua当然也能够调用C中定义的函数.一个平均数的例子,解释一下.    下面给出的C++函数average()演示了如何接受多个参数且返回超过一个值. 1.lua_gettop函数返回栈顶的索引值.因为在Lua中栈是从1开始编号的,因此该函数获得的值就是参数的个数. 2.在for循环中计算所有参数之和. 3.调用lua_pushnumber()将参数的平均值压栈.  4.最后,函数返回1,说明有一个返回值在栈中. 现在C++函数已经被定义好了,我们必须将它告诉Lua解释器.这将在main函数中初

随机推荐