使用字典开发战斗系统时出现Attempt to index nil with Instance错误
问题分析
错误Attempt to index nil with Instance的核心原因是:当你尝试访问Dictionary[action][player]时,Dictionary[action]可能还未被初始化,处于nil状态。此时用player(Instance类型)去索引nil,就会触发这个报错。
修复方案
需要在所有涉及访问Dictionary[action]的函数中,先检查该键是否存在,若不存在则先初始化为空表。以下是修正后的完整代码:
local Dictionary = require(script.Dictionary) local DictionaryHandler = {} function DictionaryHandler.find(player, action) local actionTable = Dictionary[action] return actionTable and actionTable[player] end function DictionaryHandler.add(player, action) if not Dictionary[action] then Dictionary[action] = {} end if not Dictionary[action][player] then Dictionary[action][player] = true end end function DictionaryHandler.remove(player, action) local actionTable = Dictionary[action] if actionTable and actionTable[player] then actionTable[player] = nil end end return DictionaryHandler
关键修改点
- 在
find函数中,先取出actionTable,用短路运算符and避免直接索引nil - 在
add函数中,优先初始化Dictionary[action]为空表,再进行后续操作 - 在
remove函数中,先判断actionTable是否存在,再检查并移除player对应的键值对
内容的提问来源于stack exchange,提问作者Bad Scripter
相关产品推荐
相关产品推荐

