Menu
CoddyTech

作用域与代码块

本课属于 Coddy Lua 学习旅程的“基础知识”单元。第 86 课,共 90 课。

在 Lua 中,你可以在代码的任何位置使用 do...end 块创建新的作用域。这些块可以让你精确控制局部变量的访问范围,从而精确控制变量的作用域。

下面介绍如何使用 do...end 块创建新的作用域:

local outerVar = "I'm outside"

do
    local innerVar = "I'm inside"
    print(outerVar)  -- 这里可以正常运行
    print(innerVar)  -- 这里也可以正常运行
end

print(outerVar)  -- 这里可以正常运行
print(innerVar)  -- 输出 nil:innerVar 只在代码块内有效

作用域的强大之处在于,你可以在不同的代码块中使用同名的局部变量,而且它们彼此完全独立:

local name = "Alice"

do
    local name = "Bob"  -- 这是另一个变量!
    print(name)  -- 输出 "Bob"
end

print(name)  -- 输出 "Alice"

每个 do...end 代码块都会为局部变量创建独立的环境。在代码块内声明的变量无法逃逸到外层作用域,而内层代码块可以访问外层作用域中的变量。

challenge icon

挑战

简单

创建嵌套的 do...end 代码块,演示不同作用域中同名的局部变量彼此完全独立。

首先,在外部作用域中创建一个名为 playerLevel、值为 10 的局部变量,并打印它。

然后创建一个 do...end 代码块,并在其中:

  • 声明一个同样名为 playerLevel、值为 25 的新局部变量
  • 打印这个内部的 playerLevel

内部代码块结束后,再次打印外部的 playerLevel,以表明它没有改变。

这说明不同作用域中同名的局部变量彼此完全独立,内部变量不会影响外部变量。

亲手试试

-- TODO:在这里编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Lua 在线编译器