Lua 中的do...end和repeat...until

do...end

在Lua中,do...end被用作一个语法结构,用于创建一个代码块。代码块是一组语句的集合,可以将多行代码组织在一起,形成一个独立的执行单元。

do...end的基本语法如下:

do

-- 代码块

end

在do...end语法结构中,可以包含任意数量的语句,这些语句会按顺序执行。代码块内部可以包含条件语句、循环语句、函数定义、变量赋值等等。

do...end的主要作用有两个:

  1. 创建一个作用域:do...end可以将其中的代码块封装在一个新的作用域中,使得在代码块内定义的局部变量只在该作用域内有效,避免与外部作用域中的变量冲突。

  2. 控制流程逻辑:do...end可以用于控制流程的执行顺序,例如与条件语句if配合使用,或者在某些场景下用于提供额外的逻辑控制。

下面是一个示例,展示了do...end的用法:

Lua 复制代码
local x = 10

if x > 5 then
    do
        local y = 20
        print(x + y)  -- 这里可以访问到x和y
    end
end

print(y)  -- 这里无法访问到变量y,因为它的作用域仅限于do...end代码块内部

在上述代码示例中,变量x在if语句外部定义,而变量y是在do...end代码块内部定义的。在代码块内部,可以访问到x和y,但在代码块外部,只能访问到x,无法访问到y,因为y的作用域仅限于代码块内部。

repeat...until

repeat...until是一种循环结构。它的作用是重复执行一段代码块,直到指定的条件为真。

repeat...until循环的基本语法如下:

repeat

-- 代码块

until 条件

循环会首先执行一次代码块,然后检查条件。如果条件为假,则继续重复执行代码块,直到条件为真为止。

与while和for循环不同,repeat...until循环保证至少会执行一次代码块,无论条件是否成立。如果条件一开始就成立,循环体内的代码也会执行一次后结束循环。

下面是一个示例:

Lua 复制代码
local i = 1
repeat
    print('i:', i)
    i = i + 1
until i > 10

上述代码会输出从1到10的数字。循环会先执行一次打印语句(也就是说无论条件是否为真都会先执行一次代码结构才会去检查条件),然后检查条件i > 10。如果条件为假(即i小于等于10),则继续重复执行代码块,每次循环都会打印出当前的i值,并将i递增。直到i大于10时,条件为真,循环结束。

需要注意的是,由于repeat...until循环保证循环体内的代码至少会被执行一次,因此在循环体内部要谨慎地编写代码,避免出现意料之外的行为。

相关推荐
xiangyun6112 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun6112 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
白远山13 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析
DevRay14 小时前
Java 21虚拟线程深度实战:告别线程池焦虑,百万并发吞吐量直接翻倍(原理+代码+避坑)
java·开发语言
free-elcmacom14 小时前
C++学习<1>程序分区
开发语言·c++
醉颜凉14 小时前
Java 必看:如何彻底避免 HashMap 多线程死循环问题?
java·开发语言
默 语14 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
Brilliantwxx15 小时前
【STM32】 I2C_EEPROM_test 工程(实战篇)
开发语言·stm32·单片机·嵌入式硬件·ecmascript
清水白石00815 小时前
Python 异步编程深度解析:Cancellation 到底是异常还是控制信号?从 asyncio 取消机制到企业级事务设计最佳实践
开发语言·python
kolyle15 小时前
万级 QPS 下的 Token 分发系统架构:从 0 到 1 跑通 AI 时代的“水电煤“
开发语言·人工智能·系统架构·token·qps·极智词元·大模型私有化部署