首页 > 代码库 > lua弱表引用
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=http://www.mamicode.com/==", 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弱表引用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。