脚本从第一行到末行按顺序执行一次——函数定义本身也是语句,定义之前调用它就是调 nil。学员把主逻辑写在文件开头、函数定义堆在末尾,一加载就报 attempt to call a nil value,还以为是引擎没加载脚本。错误场景:
welcome() -- 此刻 welcome 还是 nil
function welcome()
print("欢迎来到玛法")
end
顶层调用发生在定义之前——attempt to call a nil value,报错行指向第一行。
顶层语句按书写顺序执行:先定义、后调用;主入口放文件末尾。规范写法。示例代码如下:
local function welcome()
print("欢迎来到玛法")
end
welcome() -- 定义之后的任何位置都可以调用
先定义后调用——文件末尾的主逻辑可以放心使用文件里定义的全部函数。
三步验证:把调用写在定义前复现 nil 报错;调整顺序后正常输出;在文件末尾加 print("脚本加载完成"),观察加载脚本时顶层的 print 会立即执行——顶层级代码是加载期就跑的。
前向调用有标准解法:先把函数名声明为局部变量再赋值。示例代码如下:
local later -- 先声明名字
later = function()
print("后定义的函数也能被前面的代码引用")
end
later()
声明在前、赋值在后——闭包捕获的是变量本身,赋值完成后调用即有效。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、业务场景 深夜在线的成员没活动可参加,帮会夜场形同虚设。更夫玩法上线:帮会更夫沿固定路线走街报时,成员陪同巡更…
【游戏】 一、业务场景 巡逻玩法清一色打怪刷分,缺一个有剧情张力的夜场任务。捕快缉拿上线:每天刷新一名在逃逃犯藏进城内某处,…
【语法】 一、隐蔽陷阱 整点奖励用秒级触发器反复检查,同一个小时里条件一直成立,奖励被领了一整次又一次——缺一道"刻度变化才…
【语法】 一、隐蔽陷阱 6 支队伍打单循环,每队要与其他 5 队各碰一次、共 15 场——随手排的赛程不是这轮有队轮空两回,…
【游戏】 一、业务场景 冬季庆典缺一个动手类比赛,纯投票类活动又被小号刷票刷到失真。冰雕大赛改规则:限时 40 分钟现场雕刻…
【语法】 一、隐蔽陷阱 电梯收到 3 层上行、7 层上行、2 层下行、9 层下行的请求,先来先服务会让它 1 到 3 到 7…