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

时间:2024-01-21 16:03:48

do...end

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

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

do

        -- 代码块

end

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

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

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

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

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

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循环保证至少会执行一次代码块,无论条件是否成立。如果条件一开始就成立,循环体内的代码也会执行一次后结束循环。

下面是一个示例:

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循环保证循环体内的代码至少会被执行一次,因此在循环体内部要谨慎地编写代码,避免出现意料之外的行为。