Garry's Mod中Table[1]返回nil但表存在有值的问题排查
问题解答:Lua表索引错误导致
mapSpawnsData[1]返回nil 嘿,我来帮你理清这个问题~
你遇到的核心问题是混淆了Lua表的两种类型:数字索引数组和字符串键哈希表,咱们一步步拆解:
你的表实际结构
从PrintTable的输出可以看出,转成Lua表后的mapSpawnsData是一个以字符串gm_construct为键的哈希表,而非数字索引的数组。它的实际结构是这样的:
mapSpawnsData = { ["gm_construct"] = { [1] = "-1303.524902 167.472397 -44.081600", [2] = "1250.890137 331.746185 -44.081600", [3] = "674.012085 223.775604 -32.148102" } }
为什么mapSpawnsData[1]返回nil
你用mapSpawnsData[1]是在查找数字键1对应的value,但这个表的顶级键是字符串"gm_construct",根本不存在数字键1,所以自然返回nil。你误以为gm_construct是数组的第一个元素,是因为PrintTable的输出格式让它看起来排在第一位,但Lua的哈希表键是无序的(只有连续数字索引的数组才会按顺序输出)。
正确的获取方式
如果想获取gm_construct对应的子表,或者拿到这个键名,有两种常用方法:
- 直接通过字符串索引访问:
-- 两种写法等价 local spawns = mapSpawnsData["gm_construct"] -- 或者用Lua语法糖(键名符合标识符规则时可用) local spawns = mapSpawnsData.gm_construct PrintTable(spawns) -- 会输出你看到的三个坐标 - 遍历所有顶级键(适合不确定键名的情况):
for mapName, spawnPoints in pairs(mapSpawnsData) do print("当前地图名:", mapName) -- 输出gm_construct PrintTable(spawnPoints) -- 输出该地图的所有出生点坐标 end
内容的提问来源于stack exchange,提问作者Infideon
相关产品推荐
相关产品推荐

