作用域与代码块
本课属于 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 代码块都会为局部变量创建独立的环境。在代码块内声明的变量无法逃逸到外层作用域,而内层代码块可以访问外层作用域中的变量。
挑战
简单创建嵌套的 do...end 代码块,演示不同作用域中同名的局部变量彼此完全独立。
首先,在外部作用域中创建一个名为 playerLevel、值为 10 的局部变量,并打印它。
然后创建一个 do...end 代码块,并在其中:
- 声明一个同样名为
playerLevel、值为25的新局部变量 - 打印这个内部的
playerLevel
内部代码块结束后,再次打印外部的 playerLevel,以表明它没有改变。
这说明不同作用域中同名的局部变量彼此完全独立,内部变量不会影响外部变量。
亲手试试
-- TODO:在这里编写你的代码这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Lua 在线编译器