Lua - 尝试索引本地 'lvlObj'(用户数据值)

Lua - attempt to index local 'lvlObj' (a userdata value)

我是一名新手程序员,刚开始使用 lua 和 Defold,基本上我有一个 table 调用的对象,稍后在代码中我循环遍历 table 使用方法对,在那个 for 循环中,我尝试访问该项目并使用它,但我收到一条错误消息:

ERROR:SCRIPT: level/controller.script:57: attempt to index local 'lvlObj' (a userdata value)

无论如何,我想知道这个错误是什么原因造成的,我该如何解决。 (pipe_reset是一个布尔变量,应该与错误无关)

pipe_reset = false

local objects = {}

...稍后在代码中

if pipe_reset then
    for k in pairs(objects) do
        local lvlObj = objects [k]
        lvlObj.delete()
        objects [k] = nil
    end 
    pipe_reset = false
end

如果 x 是 table(相当于 x["y"]),则只能使用 "x.y",但显然不是。如果它应该是带有 "delete" 键的 table,我会查看创建 table 的位置,或者查看对象中是否有任何非 table 值.如果不是,我会尝试使用 table.remove()

您收到此错误是因为您尝试索引不可索引的用户数据类型。

我不知道 Defold,但我在其 API 参考资料中搜索了 delete() 函数。我找到的唯一一个是 go.delete()

由于您没有提供足够的信息,我只能假设这是您要使用的功能。

请参考http://www.defold.com/ref/go/#go.delete%28%5Bid%5D%29 了解详情。

delete 不是您的对象类型的成员,而是 tablego 的成员。因此,您很可能必须改为调用 go.delete() 。 go.delete() 接受一个可选的 id。还有一个函数go.get_id().

我想你可以做类似的事情

local id = go.get_id(myFancyObject)
go.delete(id)

或者您的对象可能已经是那个 ID? 所以

go.delete(myFancyObject)

也可以

也许只是试试你的例子:

for _, id in objects do
  go.delete(id)
end