函数参数超过四五个后,位置传参极易错位——第六个参数是什么?调用方要回头看定义。Lua 没有关键字参数,位置传参写反两个实参就静默错位。错误场景:
local function createItem(actor, name, count, bind, from, expire)
giveitem(actor, name, count, bind, from)
end
createItem(actor, "祝福油", 1, 7200, "礼包", 0)
第四与第五参数写反——bind 收到 7200、expire 收到 0,静默错位不报错。
多参数函数改传一张命名字段表:字段名即文档,缺省字段有兜底。规范写法。示例代码如下:
local function createItem(actor, opt)
local o = opt or {}
local count = o.count or 1
local bind = o.bind or 0
giveitem(actor, o.name, count, bind, o.from or "系统发放")
end
createItem(actor, { name = "祝福油", count = 2, from = "礼包" })
字段名自解释——写反写漏一眼可见,没传的 bind 自动落默认 0。
三步验证:位置版写反两个实参复现静默错位;改命名字段表后写反变成"字段缺失走默认";故意漏传 name,观察 giveitem 收到 nil 的报错是否直接定位到缺字段。
命名参数表配元表默认值,就是自带文档的配置对象。示例代码如下:
local defaults = { count = 1, bind = 0, from = "系统" }
local function createItem(actor, opt)
setmetatable(opt or {}, { __index = defaults })
giveitem(actor, opt.name, opt.count, opt.bind, opt.from)
end
createItem(actor, { name = "祝福油" })
__index 指向默认表——传了用传入的、没传用默认的,默认值集中一处管理。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、隐蔽陷阱 打印 5 层星号金字塔,每层比上层多 2 颗星、左侧空格少 1 个——空格与星数的数量关系不清晰时,…
【游戏】 一、业务场景 帮会下午没活动,成员上线点个卯就走。狩猎场上线:每晚 8 点开门 30 分钟,场内刷固定猎物,猎杀计…
【游戏】 一、业务场景 帮战开打才发现帮会没有物资储备,临时收捐谁也不交。粮仓上线:平日捐粮入库记账,帮战期间按配给开仓领补…
【语法】 一、隐蔽陷阱 验证"任一整数的立方都能写成连续奇数之和"时,起点从 1 开始逐个试,n 稍大就长跑几百步还没对上—…
【游戏】 一、业务场景 帮会大厅一面空墙,有人提议留言,结果聊天区刷屏根本留不住。题字墙上线:花 100 帮贡刻一句题字永久…
【游戏】 一、业务场景 灯谜活动上线半小时谜底被解题工具全数搜出——谜面与谜底同放在一份客户端配置里,读表即得。服务端重构:…