在 if 块里用 local 声明的变量,出了块就不存在——学员以为声明了就能在外面用,取到的是 nil 还以为赋值失败。Lua 的块以 if、for、while、do 配对的 end 为边界,local 的生命周期止于所在块的 end,块外是另一个名字空间。错误场景:
local hp = 70
if hp < 80 then
local tip = "血量偏低,及时补给金创药"
end
print(tip)
输出 nil——tip 在 if 块的 end 处销毁,块外访问不到。
需要在外部使用的变量,把声明提到块外,块内只做赋值。规范写法。示例代码如下:
local hp = 70
local tip = nil
if hp < 80 then
tip = "血量偏低,及时补给金创药"
end
print(tip)
输出提示文本——声明在外赋值在内,作用域覆盖整段逻辑。
三步验证:写一段红名判定脚本,local 的惩罚标志在 if 块外打印为 nil;把声明提到块外后,标志正常传递到后续的惩罚逻辑;再在 for 循环里做同样的对照,循环内 local 的计数器到循环外同样是 nil——三种块结构的边界行为如出一辙。
do 块可以主动制造作用域,把临时变量的生命周期收窄。示例代码如下:
local bonus = 0
do
local rate = 2
bonus = 100 * rate
end
print(bonus)
rate 只在 do 块内存在,用完即弃,不会污染外层名字空间——需要一次性换算系数时格外好用。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、抛坑提问:宠物跟随走直线太生硬,怎么走出圆滑弧线?二次贝塞尔曲线用两个端点加一个控制点,参数从 0 走到 1 …
【游戏】 一、一行代码拆解:SUB[missing] = actual —— 材料替换的全部骨架:替换表声明等价材料对,合成…
【游戏】 一、一行代码拆解:if WINNER == nil then WINNER = actor end —— 抢答判定…
【语法】 一、隐蔽陷阱:技能范围绕施法者旋转,逐点手算坐标容易把余弦与正弦位置写反——二维旋转公式为新横等于旧横乘余弦减旧纵…
【游戏】 一、一行代码拆解:BUYS = BUYS + 1 —— 次数增购的全部骨架:每日 3 次耗尽后可付费增购 1 次,…
【游戏】 一、一行代码拆解:LEND[id] = {who = actor, at = os.time()} —— 仓库借还…