Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Lua中通过名称引用表中的对象_Lua_Lua Table_Love2d - Fatal编程技术网

如何在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。对象仍将

这似乎是一个非常直截了当的问题,但我还没有找到答案。我在Lua中将游戏对象添加到表中,如下所示:

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。在堆栈溢出问题上,我仍然没有足够的分数来投票支持这个答案,但我一定会尽快给你们的答案打分