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

Lua-尝试索引本地';lvlObj';(用户数据值),lua,lua-table,defold,Lua,Lua Table,Defold,我是一个新手程序员,刚从lua和Defold开始,基本上我有一个名为objects的表,后来在代码中,我使用方法对在表中循环,在for循环中,我尝试访问并使用该项,但我得到一个错误,说: ERROR:SCRIPT: level/controller.script:57: attempt to index local 'lvlObj' (a userdata value) 不管怎样,我想知道这个错误是从哪里来的,我该如何修复它。 (pipe_reset是一个布尔变量,与错误无关) 。。。代码的后

我是一个新手程序员,刚从lua和Defold开始,基本上我有一个名为objects的表,后来在代码中,我使用方法对在表中循环,在for循环中,我尝试访问并使用该项,但我得到一个错误,说:

ERROR:SCRIPT: level/controller.script:57: attempt to index local 'lvlObj' (a userdata value)
不管怎样,我想知道这个错误是从哪里来的,我该如何修复它。 (pipe_reset是一个布尔变量,与错误无关)

。。。代码的后面部分

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是一个表(它相当于x[“y”]),则只能使用“x.y”,显然它不是。如果它应该是一个带有“delete”键的表,我将查看该表的创建位置,或者查看对象中是否有任何非表值。如果不是,我将尝试改用
table.remove()

由于尝试索引不可索引的userdata类型,因此会出现此错误

我不知道Defold,但我在它的API引用中搜索了delete()函数。我唯一找到的是go.delete()

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

请参阅 详情请参阅

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

我想你可以做类似的事情

local id = go.get_id(myFancyObject)
go.delete(id)
或者你的对象就是那个id? 所以

可能也行

也许你可以试试你的例子:

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

在本例中,我尝试使用objects.k,但它给了我一个错误:level/controller.script:56:尝试索引字段“k”(一个空值)对象。k不等同于
对象[k]
,它相当于
对象[“k”]
,这意味着只有当您知道映射了值为
“k”
,它才有用,你想访问那个特定的东西。老实说,在这种情况下,我一点也不担心点符号。他显然试图在从表中删除对象中的用户数据之前将其删除,因此table.remove对他没有任何帮助。请共享您在对象表中放入的内容。您试图调用的函数显然不存在于该userdata类型中。
go.delete(myFancyObject)
for _, id in objects do
  go.delete(id)
end