码迷,mamicode.com
首页 > 其他好文 > 详细

lua弱表引用

时间:2016-11-29 07:17:54      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:mod   print   --   垃圾回收   log   cal   stdout   http   details   

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弱表引用

标签:mod   print   --   垃圾回收   log   cal   stdout   http   details   

原文地址:http://www.cnblogs.com/TonyZ/p/6112010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!