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
我是一名新手程序员,刚开始使用 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