lua弱表引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua弱表引用相关的知识,希望对你有一定的参考价值。

1、普通垃圾回收

--lua弱表,主要是删除key或者value是table的一种元方法  
--元表里的__mode字段包含k或者v;k表示key为弱引用;v表示value为弱引用  
  
local testa = {}  
tbl_key = {}  
testa[tbl_key] = 1  
tbl_key = {}  
testa[tbl_key] = 2  
  
--垃圾回收  
collectgarbage()  
  
local function PrintInfo()  
  
    for k, v in pairs(testa) do  
        print(k, "===", v)  
    end  
  
end  
  
PrintInfo()  

显示结果:

>lua -e "io.stdout:setvbuf ‘no‘" "Lua.lua"   
table: 004FB890 === 1  
table: 004FB8E0 === 2  
>Exit code: 0  

2、设置弱引用为key

local testa = {}  
local mt = {__mode = k}  
setmetatable(testa,mt)  
  
tbl_key = {}  
testa[tbl_key] = 1  
tbl_key = {}  
testa[tbl_key] = 2  
  
--垃圾回收  
collectgarbage()  
  
local function PrintInfo()  
  
    for k, v in pairs(testa) do  
        print(k, "===", v)  
    end  
  
end  
  
PrintInfo()  

显示结果:

>lua -e "io.stdout:setvbuf ‘no‘" "Lua.lua"   
table: 006EB930 === 2  
>Exit code: 0  

通过key的弱引用,覆盖了key为key_table的值;没有其他地方在引用,所以被回收掉了

 

3、设置弱引用为value

local testa = {}  
local mt = {__mode = v}  
setmetatable(testa,mt)  
  
tbl_key = {1,2,3}  
testa[1] = tbl_key  
tbl_key = {4,5,6}  
testa[2] = tbl_key  
  
--垃圾回收  
collectgarbage()  
  
local function PrintInfo()  
  
    for k, v in pairs(testa) do  
        for key, value in pairs(v) do  
            print(" value===", value)  
        end  
    end  
  
end  
  
PrintInfo()  

结果:

>lua -e "io.stdout:setvbuf ‘no‘" "Lua.lua" 
 value=== 4
 value=== 5
 value=== 6
>Exit code: 0

转载:http://blog.csdn.net/u012071200/article/details/31400541

以上是关于lua弱表引用的主要内容,如果未能解决你的问题,请参考以下文章

浅析一个lua文件窥slua工作机制

Lua内存分析工具

lua | 利用元表实现修饰器

在Pandoc lua过滤器中连接字符串片段

我看不到 LUA 语言中的调用和方法之间的引用

如何在lua中正确定义局部变量并将其引用到XML?