【语法】
一、机制原理
线上事故:计数器永远停在 0,排查半天发现函数里写了 local count = count + 1——右侧读的是外层计数,左侧却声明了一个新的同名局部把它盖住,赋的是自己作用域里的副本,外层纹丝不动。遮蔽规则一句话:声明即遮蔽,赋值不遮蔽。内层任何作用域里 local 同名变量,外层那个在之内不可见;不加 local 的赋值则永远落在已存在的外层变量上。local x = x 这个惯用法是"有意复制进新作用域",与手滑遮蔽只有一线之隔,参数同名遮蔽同理。
二、错误写法
-- 错误:声明遮蔽,外层计数永不增长
local count = 0
local function add()
local count = count + 1
end
三、正确写法
local count = 0
local function add()
count = count + 1
end
local function double(count)
return count * 2
end
add()
add()
local p = getplayerbyname("shd01")
sendmsg(p, 1, count .. "/" .. double(5))
四、引擎验证
加号赋值后外层计数正确涨到 2;函数参数同名遮蔽只在函数体内生效,外界值 5 翻倍为 10,外层无感。
五、FAQ
问:local x = x 什么时候用?
答:有意把外层值复制进闭包或循环体作独立副本时。
问:怎么快速发现误遮蔽?
答:静态检查工具扫"声明未使用",名字风格分层。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 竹蜻蜓是最低配的直升机:两片叶、一根杆,搓得够快就能上天。今天拆竹蜻蜓的表现,核心机制一句话——连点搓杆攒转速…
【游戏功能】 水枪打鸭是庙会射摊里的冷门冠军:不打气球不打玩具,专滋台上摇摇摆摆的鸭子——水柱推鸭的物理感是它的独门戏。今天…
【游戏功能】 抽积木的紧张是会记账的:每抽一块塔身晃一下、稳定度掉一截,账记到见底,塔就倒了。今天拆抽积木的表现,看"稳定度…
【游戏功能】 吹泡泡的停不下来定律:吹的时候笑,破的时候"哎呀",然后立刻再吹一串。泡泡的虹膜流转让每一颗都不重样,戳破瞬间…
【游戏功能】 拆一行代码: 风车的转速按时间衰减,吹一口气加一次转速——大风车的全部机制就是"加一把劲等它慢慢停"。今天讲大…
【游戏功能】 生日会上最安静的三秒钟:歌声停、烛光摇、全桌人屏息等你吹——吹蜡烛是所有仪式里参与感最强的三秒钟,因为每个人都…