首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua -尝试索引本地“lvlObj”(用户数据值)

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

Stack Overflow用户
提问于 2016-04-13 16:06:01
回答 2查看 9.5K关注 0票数 3

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

代码语言:javascript
复制
ERROR:SCRIPT: level/controller.script:57: attempt to index local 'lvlObj' (a userdata value)

无论如何,我想知道这个错误来自什么,以及如何修复它。(pipe_reset是一个布尔变量,与错误无关)

代码语言:javascript
复制
pipe_reset = false

local objects = {}

..。后面的代码

代码语言:javascript
复制
if pipe_reset then
    for k in pairs(objects) do
        local lvlObj = objects [k]
        lvlObj.delete()
        objects [k] = nil
    end 
    pipe_reset = false
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-13 18:31:13

由于试图索引不可索引的用户数据类型,因此会出现此错误。

我不知道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()。

我想你可以这样做

代码语言:javascript
复制
local id = go.get_id(myFancyObject)
go.delete(id)

或者你的目标也是身份证吗?所以

代码语言:javascript
复制
go.delete(myFancyObject)

可能也能用

不妨试试你的例子:

代码语言:javascript
复制
for _, id in objects do
  go.delete(id)
end
票数 2
EN

Stack Overflow用户

发布于 2016-04-13 16:17:10

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36603923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档