Lua属性访问器

我对我试图维护的某些代码中 Lua 属性的工作方式感到困惑。在此之前我花了很多时间在 Lua 文档中学习。

例如,在其中一个 Lua 表中有一个函数(我们将称其为“嵌套表”的例子):

function addItem(item)

index = itemTable.getIndex(item.position[1], item.position[2])

itemTable.items[index] = item

end;

a = Xpl3dSwitch { position = { 27, 0, 1, 1} }
itemTable.addItem(a) -- 看起来没有“注册”位置属性

然而

a = Xpl3dSwitch { }

a.position[0] = 27
a.position[1] = 0

itemTable.addItem(a) --这个“注册”了位置属性

似乎可以工作。为什么“嵌套表”例子中的位置表没有保留?

另外,关于“a = Xpl3dSwitch { }”——它是对象构造器吗?从 Lua 的“文档”中不清楚这是什么。

点赞
用户4173441
用户4173441

看看表 a 并进行比较。这应该会指向发生错误的方向。

要查看表 a 的内容,可以使用类似以下的代码:

function getTableContent(tab, str)
str = str or "table"
for i, v in pairs(tab) do
    if type(v) == "table" and v ~= _G then
        str = str.."->"..tostring(i)
        getTableContent(v, str)
    else
        print(str.."  Index: "..tostring(i).."  Value: "..tostring(v))
    end
end
end

getTableContent(a)
io.read()

一旦了解了正常情况和不正常情况下的结构,您应该就能够进行所需的调整了。

编辑:

此外,您可以使用:

a = Xpl3dSwitch { }

a.position = {27, 0, 1, 1}

2014-11-03 14:59:36