参数变为零

时间:2015-02-28 16:29:48

标签: lua

好, 我目前在游戏中遇到以下错误:

...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

我添加了一个检查,看看我是否传递了一个nill值,但仍然一直收到错误。 我解释的方式是在函数调用期间传递的参数变为nil。

然而,当我自己检查控制台中的数据时,数据就在那里......

1 个答案:

答案 0 :(得分:2)

您应该将来电从self.IsStance(spell)更改为self:IsStance(spell)或使用self.IsStance(self, spell)。由于您将IsStance定义为方法(使用GeminiSpellBook:IsStance),因此第一个参数为self,其中spell被分配,spell参数为期望获得nil值,这会导致您看到的错误。