【问题标题】:bad argument #1 to 'insert' (table expected, got nil) error in love2d lualove2d lua中“插入”的错误参数#1(预期的表,得到了nil)错误
【发布时间】:2017-04-08 02:35:48
【问题描述】:

当我尝试运行我的 lua 脚本时,我不断收到错误消息。 错误是:'insert' 的错误参数 #1(预期的表,得到了 nil)

这是我的游戏循环代码:

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

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    根据您显示的代码,您的gameLoop 表不包含clocks 成员,因此您实际上是将nil 传递给insert(self.clocks, obj) 的第一个参数。

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

    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
    

    【讨论】:

    • 非常感谢!窗口现在打开,没有任何错误。 (完美运行!)
    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 2017-05-25
    • 2016-12-09
    • 1970-01-01
    • 2018-07-01
    • 2016-11-05
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多