Lua注意事項總結

對lua坑的整合:
參考:
https://www.cnblogs.com/guangyun/p/4685550.html
Lua 弱引用table

----------

1.lua弱引用
t = {};
   
    -- 使用一個table作爲t的key值
    key1 = {name = "key1"};
    t[key1] = 1;
    key1 = nil;
   
    -- 強制進行一次垃圾收集
    collectgarbage();
   
    for key, value in pairs(t) do
        print(key.name .. ":" .. value);
    end

輸出:

[LUA-print] key1:1

 

設置弱引用後:

t = {};
   
    -- 給t設置一個元表,增加__mode元方法,賦值爲“k”
    setmetatable(t, {__mode = "k"});
   
    -- 使用一個table作爲t的key值
    key1 = {name = "key1"};
    t[key1] = 1;
    key1 = nil;
   
    -- 又使用一個table作爲t的key值
    key2 = {name = "key2"};
    t[key2] = 1;
    key2 = nil;
   
    -- 強制進行一次垃圾收集
    collectgarbage();
   
    for key, value in pairs(t) do
        print(key.name .. ":" .. value);
    end

 

輸出:


1)key值弱引用,也就是剛剛說到的情況,只要其他地方沒有對key值引用,那麼,table自身的這個字段也會被刪除。設置方法:setmetatable(t, {__mode = “k”});
2)value值弱引用,情況類似,只要其他地方沒有對value值引用,那麼,table的這個value所在的字段也會被刪除。設置方法:setmetatable(t, {__mode = “v”});
3)key和value弱引用,規則一樣,但是key和value都同時生效,任意一個起作用時都會導致table的字段被刪除。設置方法:setmetatable(t, {__mode = “kv”});
沒有設置弱引用時

 

To Be Continue

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章