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

时间:2016-04-13 16:06:02

标签: lua lua-table defold

我是一个新手程序员,刚开始使用lua和Defold,基本上我有一个名为objects的表,后来在代码中我使用方法对在表中循环,并且在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

2 个答案:

答案 0 :(得分:2)

您收到此错误是因为您尝试索引不可索引的userdata类型。

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

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

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

delete不是您的对象类型的成员,而是表go的成员。所以你很可能不得不调用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

答案 1 :(得分:1)

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