写代码少打 local 很爽,内存会哭。这节把栈/堆和作用域一次讲清。
| 栈 | 堆 | |
|---|---|---|
| 特点 | 小、快 | 大、慢 |
| 放什么 | 局部变量、函数参数、临时值 | 表、字符串等引用对象 |
| 生命周期 | 作用域结束就扔 | 手动/GC 决定 |
联想:栈 = 瞬间记忆,堆 = 手机相册。6 位数你脑子里记一下是栈;写进文本是堆。
local n = 100
do
local n = 200
print(n) --> 200
end
print(n) --> 100
do end 像一间屋子;local 是屋里的灯,出屋灯灭。外面的 n 不受影响。
-- 不好:全局进堆,永不自动消失,还容易撞名
A = 1
B = 2
-- 好:栈上分配,出作用域即释放
local A = 1
local B = 2
养成习惯:函数体、循环、触发里,新变量一律 local。
-- 模块.lua
local T = {}
local secret = 0 -- 外面摸不到
function T.add(x) secret = secret + x end
function T.get() return secret end
return T
secret 是模块私有;只暴露 add/get。这是封装的核心。
-- 模块 A
local T = { hi = function() print("A") end }
return T
-- 别人写了
T = { hi = function() print("B") end }
若模块用全局 T,后写的会覆盖先写的。用 local T + return 就安全。
localreturn tableipairs,字典 pairsprint(type(...)) 自己验今日练习:用 do...end 演示局部灯;写模块含私有计数器,只通过函数改值。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
写代码少打 local 很爽,内存会哭。这节把 栈/堆 和 作用域 一次讲清。 一、栈和堆 栈 堆 -- ---- ----…
循环除了 for i=1, t ,还有 迭代器 。数组用 ipairs ,字典用 pairs 。 一、回顾 for 循环 二…
模块就是 工具箱 。后端命令八百多个,记不住很正常——把自己常用的封装起来,按名字调用。 一、include 与 requi…
会判断了,就能做会回话的 NPC。今天拼一个简易 GM 工具界面。 一、用 say 吐出界面 客户端编辑器 Ctrl + F…
与或非听起来玄,其实就是三张通行证。 一、and(与)= 过安检 机票 + 身份证 ,少一样不让过。后面还能无限加条件。 二…
判断 = 比较 + 分支。今天把三种 if 写法、以及工程里最好用的「防卫语句」一次练透。 一、三种判断结构 elseif …