lua弱表引用
发布时间:2020-12-14 22:09:33 所属栏目:大数据 来源:网络整理
导读:1、普通垃圾回收 --lua弱表,主要是删除key或者value是table的一种元方法--元表里的__mode字段包含k或者v;k表示key为弱引用;v表示value为弱引用local testa = {}tbl_key = {}testa[tbl_key] = 1tbl_key = {}testa[tbl_key] = 2--垃圾回收collectgarbage()l
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) 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |