参数变为零
Parameter turns nil
好的,
我目前在游戏中遇到以下错误:
...Addons\WatcherEx\GeminiSpellBook\GeminiSpellBook.lua:91: attempt to index local 'spell' (a nil value)
stack trace:
...Addons\WatcherEx\GeminiSpellBook\GeminiSpellBook.lua:91: in function 'IsStance'
...Addons\WatcherEx\GeminiSpellBook\GeminiSpellBook.lua:132: in function 'GetInnates'
...aming\NCSOFT\WildStar\Addons\WatcherEx\WatcherEx.lua:1868: in function 'UpdateSkillsList'
...aming\NCSOFT\WildStar\Addons\WatcherEx\WatcherEx.lua:1606: in function <...aming\NCSOFT\WildStar\Addons\WatcherEx\WatcherEx.lua:1600>
所以我同时使用了这两个函数:
-- Description: Determines whether a given spell ID is a stance or not.
--
-- Parameters: - spell: The Spell object from the game we need to check.
--
-- Returns: True if the ID is that of a stance spell; otherwise false.
--
function GeminiSpellBook:IsStance(spell)
for i,group in ipairs(ctClassStancesAbilities) do
for j, stanceId in pairs(group) do
if spell:GetId() == stanceId then
return true
end
end
end
return false
end
由以下函数调用:
-- Description: Gets all the Innate abilities for the current character being played and stores
-- them in the internal tInnates structure.
-- The function takes no arguments, but expects a 'self' parameter, so
-- should be called as SpellBook:GetInnates()
--
-- Parameters:
--
-- Returns: The list of Innate abilities.
function GeminiSpellBook:GetInnates()
if self.tInnates == nil or #self.tInnates <= 0 then
self.tInnates = { }
local tSpells = GameLib.GetClassInnateAbilitySpells().tSpells or { }
for _,spell in ipairs(tSpells) do
if spell ~= nil and not self.IsStance(spell) then
table.insert(self.tInnates, spell)
end
end
end
return self.innates
end
我添加了检查以查看我是否传递了空值,但我仍然不断收到错误。
我的理解是函数调用时传入的参数变成了nil。
然而我自己在控制台查看数据时,数据就在那里....
您应该将呼叫从 self.IsStance(spell)
更改为 self:IsStance(spell)
或使用 self.IsStance(self, spell)
。由于您将 IsStance
定义为方法(使用 GeminiSpellBook:IsStance
),它的第一个参数为 self
,这是 spell
被赋值的地方,而 spell
参数是您expect 获取 nil
值,这导致了您看到的错误。
好的, 我目前在游戏中遇到以下错误:
...Addons\WatcherEx\GeminiSpellBook\GeminiSpellBook.lua:91: attempt to index local 'spell' (a nil value)
stack trace:
...Addons\WatcherEx\GeminiSpellBook\GeminiSpellBook.lua:91: in function 'IsStance'
...Addons\WatcherEx\GeminiSpellBook\GeminiSpellBook.lua:132: in function 'GetInnates'
...aming\NCSOFT\WildStar\Addons\WatcherEx\WatcherEx.lua:1868: in function 'UpdateSkillsList'
...aming\NCSOFT\WildStar\Addons\WatcherEx\WatcherEx.lua:1606: in function <...aming\NCSOFT\WildStar\Addons\WatcherEx\WatcherEx.lua:1600>
所以我同时使用了这两个函数:
-- Description: Determines whether a given spell ID is a stance or not.
--
-- Parameters: - spell: The Spell object from the game we need to check.
--
-- Returns: True if the ID is that of a stance spell; otherwise false.
--
function GeminiSpellBook:IsStance(spell)
for i,group in ipairs(ctClassStancesAbilities) do
for j, stanceId in pairs(group) do
if spell:GetId() == stanceId then
return true
end
end
end
return false
end
由以下函数调用:
-- Description: Gets all the Innate abilities for the current character being played and stores
-- them in the internal tInnates structure.
-- The function takes no arguments, but expects a 'self' parameter, so
-- should be called as SpellBook:GetInnates()
--
-- Parameters:
--
-- Returns: The list of Innate abilities.
function GeminiSpellBook:GetInnates()
if self.tInnates == nil or #self.tInnates <= 0 then
self.tInnates = { }
local tSpells = GameLib.GetClassInnateAbilitySpells().tSpells or { }
for _,spell in ipairs(tSpells) do
if spell ~= nil and not self.IsStance(spell) then
table.insert(self.tInnates, spell)
end
end
end
return self.innates
end
我添加了检查以查看我是否传递了空值,但我仍然不断收到错误。 我的理解是函数调用时传入的参数变成了nil。
然而我自己在控制台查看数据时,数据就在那里....
您应该将呼叫从 self.IsStance(spell)
更改为 self:IsStance(spell)
或使用 self.IsStance(self, spell)
。由于您将 IsStance
定义为方法(使用 GeminiSpellBook:IsStance
),它的第一个参数为 self
,这是 spell
被赋值的地方,而 spell
参数是您expect 获取 nil
值,这导致了您看到的错误。