'insert' 的错误参数 #1(table 预期,结果为零)love2d lua 中的错误

bad argument #1 to 'insert' (table expected, got nil) error in love2d lua

当我尝试 运行 我的 lua 脚本时,我一直收到错误消息。 错误是:'insert' 的参数 #1 错误(预期 table,结果为零)

这是我的游戏循环代码:

local GameLoop = {}

local insert = table.insert
local remove = table.remove

function GameLoop:create()

    local gameLoop = {}

    function gameLoop:addLoop(obj)

        insert(self.clocks,obj)

    end

    function gameLoop:update(dt)

        for clocks = 0,#self.clocks do
            local obj = self.clocks[clocks]
            if obj ~= nil then
                obj:tick(dt)
            end
        end

    end

return gameLoop

end

return GameLoop

根据您显示的代码,您的 gameLoop 表不包含 clocks 成员,因此您实际上是将 nil 传递给 [=15= 的第一个参数].

简单的解决方法是添加该成员。

local gameLoop = { clocks = {} }

顺便说一句,使用元表编写这种类型的结构通常更好,因为它减少了函数重复。

local insert, remove =
    table.insert, table.remove

local GameLoop = {}
GameLoop.__index = GameLoop

function GameLoop:create ()
    return setmetatable({
        clocks = {}
    }, self)
end

function GameLoop:addLoop (obj)
    insert(self.clocks, obj)
end

function GameLoop:update (dt)
    for _, clock in ipairs(self.clocks) do
        obj:tick(dt)
    end
end

return GameLoop