如何在Lua中通过名称引用表中的对象
这似乎是一个非常直截了当的问题,但我还没有找到答案。我在Lua中将游戏对象添加到表中,如下所示:如何在Lua中通过名称引用表中的对象,lua,lua-table,love2d,Lua,Lua Table,Love2d,这似乎是一个非常直截了当的问题,但我还没有找到答案。我在Lua中将游戏对象添加到表中,如下所示: local lock = GameObject { -- object values and methods table.insert(objects, lock) 但是,尽管在谷歌上搜索和阅读了很多Lua文档,我还是不知道如何通过名称引用这些对象。我认为这是因为有一个非常具体的语法可以这样做。如果有人能帮我,我将不胜感激。谢谢 您可能希望执行类似的操作,而不是table.insert。对象仍将
local lock = GameObject {
-- object values and methods
table.insert(objects, lock)
但是,尽管在谷歌上搜索和阅读了很多Lua文档,我还是不知道如何通过名称引用这些对象。我认为这是因为有一个非常具体的语法可以这样做。如果有人能帮我,我将不胜感激。谢谢 您可能希望执行类似的操作,而不是table.insert。对象仍将是表
objects = {}
objects.lock = {}
objects.lock2 = {}
如果你执行
for key, value in pairs(objects) do
print(key,value)
end
您将获得输出
lock2 table: 0x1af3310
lock table: 0x1af3870
进一步解释
在您的问题中,lock上面的解决方案只是给定给它的变量名,而不是索引的名称
在这个代码段中,您可以看到插入到对象中的项没有在对象中记录变量名。对象将int存储为键,然后将插入的表存储为值
objects = {}
local lock = {}
local lock2 = {}
-- object values and methods
table.insert(objects, lock)
table.insert(objects, lock2)
for key, value in pairs(objects) do
print(key,value)
print(type(value))
end
印刷品
1 table: 0x131b590
table
2 table: 0x131b540
table
您可能希望执行类似的操作,而不是table.insert。对象仍将是表
objects = {}
objects.lock = {}
objects.lock2 = {}
如果你执行
for key, value in pairs(objects) do
print(key,value)
end
您将获得输出
lock2 table: 0x1af3310
lock table: 0x1af3870
进一步解释
在您的问题中,lock上面的解决方案只是给定给它的变量名,而不是索引的名称
在这个代码段中,您可以看到插入到对象中的项没有在对象中记录变量名。对象将int存储为键,然后将插入的表存储为值
objects = {}
local lock = {}
local lock2 = {}
-- object values and methods
table.insert(objects, lock)
table.insert(objects, lock2)
for key, value in pairs(objects) do
print(key,value)
print(type(value))
end
印刷品
1 table: 0x131b590
table
2 table: 0x131b540
table
有两种方法可以引用表内容
tab={}
-- Defining some key/value pairs
tab[1]='First way'
-- The first way is in Lua also known as: Weak reference
tab.two='Second way'
-- Referencing
print(tab[1], tab.two, tab['two'])
有两种方法可以引用表内容
tab={}
-- Defining some key/value pairs
tab[1]='First way'
-- The first way is in Lua also known as: Weak reference
tab.two='Second way'
-- Referencing
print(tab[1], tab.two, tab['two'])
弱引用/表在Lua中是一个完全不同的概念,请参阅手册中的。tab.two是tab[two]的语法糖。参考。你是对的-我的意思是在这种情况下,从G的角度来看,如果G有setmetatable,{uuuu mode='v'},那么collectgarbage移除整个表,如arg或弱表键/值,如tab[1]-对不起。弱引用/表在Lua中是一个完全不同的概念,请参阅手册。tab.two是tab[two]的语法糖。请参阅。您是对的-我的意思是,在本例中,从G的角度来看,如果G具有setmetatable,{uuu mode='v'},那么collectgarbage将删除整个表(如arg)或弱表键/值(如tab[1])-抱歉。谢谢!我有几个后续问题。1我的程序在许多地方使用pairs函数对对象作出反应。这是否仍然适用于您建议的方法,即objects.lock。2如果没有,是否可以在创建时获取这些关键整数0x131b590,并将其存储在某个位置以供快速参考?3.有没有人有使用钢笔灯的经验?我听说这是一个救命稻草,但我不太知道如何开始。当我需要它时,我会收到一条错误消息,在Love目录中没有pl.pretty。我不知道如何从github上的PL页面下载和安装它。1是的,它仍然有效,for循环输出的关键是“lock”,而不是1或2。2 0x131b590指的是值,而不是键3。我对Penlight没有任何经验。如果答案解决了你的问题,你能把它标对吗?感谢you@DavidGallagher我更新了我的答案,以显示第1部分是如何工作的。再次感谢@Sam。在堆栈溢出问题上,我仍然没有足够的分数来对答案进行公开投票,但我一定会在我完成投票后立即标记您的答案!我有几个后续问题。1我的程序在许多地方使用pairs函数对对象作出反应。这是否仍然适用于您建议的方法,即objects.lock。2如果没有,是否可以在创建时获取这些关键整数0x131b590,并将其存储在某个位置以供快速参考?3.有没有人有使用钢笔灯的经验?我听说这是一个救命稻草,但我不太知道如何开始。当我需要它时,我会收到一条错误消息,在Love目录中没有pl.pretty。我不知道如何从github上的PL页面下载和安装它。1是的,它仍然有效,for循环输出的关键是“lock”,而不是1或2。2 0x131b590指的是值,而不是键3。我对Penlight没有任何经验。如果答案解决了你的问题,你能把它标对吗?感谢you@DavidGallagher我更新了我的答案,以显示第1部分是如何工作的。再次感谢@Sam。在堆栈溢出问题上,我仍然没有足够的分数来投票支持这个答案,但我一定会尽快给你们的答案打分