Lua向表插入数据的不同方式及嵌套表赋值失败问题咨询
Lua嵌套表赋值报错问题解决方案
错误原因
Lua不会自动生成嵌套表的中间层级结构。你初始化activeContracts = {}后,activeContracts[user_id]默认值为nil,直接对nil执行索引[1]的操作就会触发运行时报错。
正确逐层赋值实现
要实现和字面量定义完全一致的效果,需要先手动创建每一层不存在的子表:
activeContracts = {} -- 初始化user_id对应的第一层子表 activeContracts[user_id] = {} -- 初始化索引1对应的第二层子表 activeContracts[user_id][1] = {} -- 最终完成字段赋值 activeContracts[user_id][1]["source"] = src
可选:封装通用深层赋值工具
如果项目中频繁需要做深层嵌套表的赋值操作,可以封装通用函数自动创建中间表,避免每次手动写多层初始化代码:
-- 通用嵌套表赋值函数,参数依次为:根表、要赋的值、层级1的key、层级2的key...层级n的key function deepSet(root, value, ...) local keys = {...} local current = root -- 遍历到倒数第二层,自动创建不存在的表 for i = 1, #keys - 1 do local key = keys[i] if not current[key] then current[key] = {} end current = current[key] end -- 给最后一层key赋值 current[keys[#keys]] = value end -- 使用示例 activeContracts = {} deepSet(activeContracts, src, user_id, 1, "source")
内容的提问来源于stack exchange,提问作者name name
相关产品推荐
相关产品推荐

