通过引用调用lua表
一些背景:我在不同的Lua表中跟踪不同的硬件资源-对于每个硬件资源,我都有一个对应的Lua表。为了管理所有资源,我认为创建一个主表是有意义的,如果硬件资源是空闲的,只需将对应的表enty设置为nil 下面的示例显示,一个表似乎链接了其中的另一个表作为引用;但是,如果我将nil分配给表键,则只有键被设置为nil,而不是表本身,正如我实际希望的那样。 (请参阅最后5行的输出。) 输出:通过引用调用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
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仍然是该表的有效引用。只要有对该表的引用,垃圾收集器就不会碰它
为了删除表,必须删除所有引用。您不能直接删除表。谢谢小猪!你写的东西完全有道理。我不是那样看的。我需要想出另一种方法来管理我的资源。无论如何,这个问题已经得到了充分的回答。再次感谢,谢谢小猪!你写的东西完全有道理。我不是那样看的。我需要想出另一种方法来管理我的资源。无论如何,这个问题已经得到了充分的回答。再次感谢。