Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/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_Pass By Reference - Fatal编程技术网

通过引用调用lua表

通过引用调用lua表,lua,pass-by-reference,Lua,Pass By Reference,一些背景:我在不同的Lua表中跟踪不同的硬件资源-对于每个硬件资源,我都有一个对应的Lua表。为了管理所有资源,我认为创建一个主表是有意义的,如果硬件资源是空闲的,只需将对应的表enty设置为nil 下面的示例显示,一个表似乎链接了其中的另一个表作为引用;但是,如果我将nil分配给表键,则只有键被设置为nil,而不是表本身,正如我实际希望的那样。 (请参阅最后5行的输出。) 输出: The same value. 123 123 --- The same value. 456 456 --- T

一些背景:我在不同的Lua表中跟踪不同的硬件资源-对于每个硬件资源,我都有一个对应的Lua表。为了管理所有资源,我认为创建一个主表是有意义的,如果硬件资源是空闲的,只需将对应的表enty设置为nil

下面的示例显示,一个表似乎链接了其中的另一个表作为引用;但是,如果我将nil分配给表键,则只有键被设置为nil,而不是表本身,正如我实际希望的那样。 (请参阅最后5行的输出。)

输出:

The same value.
123
123
---
The same value.
456
456
---
Tables seem to have the same address.
table: 0x7f17a41596d0
table: 0x7f17a41596d0
---
SubTable seems still to exist, even referance was set to nil
nil
table: 0x7f4b48151710
456
是否有可能在不设置subTable=nil和mainTable.subkey=nil的情况下从子表中删除内部内容?(因此,最后调用子表的_gc方法。)

在这段代码中,您创建了两个表变量。一个由mainTable引用,另一个由subTable引用

mainTable.subTable = subTable
现在,我们将另一个引用mainTable.subTable添加到已经有引用子表的表中。所以这个表变量no有两个引用

这一行:

mainTable.subTable = nil
将仅删除两个引用中的一个。因此subTable仍然是该表的有效引用。只要有对该表的引用,垃圾收集器就不会碰它

为了删除表,必须删除所有引用。不能直接删除表

在这段代码中,您创建了两个表变量。一个由mainTable引用,另一个由subTable引用

mainTable.subTable = subTable
现在,我们将另一个引用mainTable.subTable添加到已经有引用子表的表中。所以这个表变量no有两个引用

这一行:

mainTable.subTable = nil
将仅删除两个引用中的一个。因此subTable仍然是该表的有效引用。只要有对该表的引用,垃圾收集器就不会碰它


为了删除表,必须删除所有引用。您不能直接删除表。

谢谢小猪!你写的东西完全有道理。我不是那样看的。我需要想出另一种方法来管理我的资源。无论如何,这个问题已经得到了充分的回答。再次感谢,谢谢小猪!你写的东西完全有道理。我不是那样看的。我需要想出另一种方法来管理我的资源。无论如何,这个问题已经得到了充分的回答。再次感谢。