In Lua, should I set all table elements to nil when not in use?

For example, I created a table this way

myTable = {}
for n=1,5
    local item = {
        name = "item"..n,
        id = n,
    }
    myTable[n] = item
end

If this table is no longer used to free this table for the garbage collector,

Do I need to scroll through a table to assign each element a zero?

for n=1,5
    myTable[n] = nil
end

or all i need to do is assign table zero?

myTable = nil

In addition to the above, if a table element has some property that is assigned to some other table, do I also need to reset them separately?

for n=1,5
    myTable[n].someTable = nil
    myTable[n] = nil
end
myTable = nil
+3
source share
2 answers

Just assign myTable = nilin order. You can test it like this using the meta meta __gc:

myTable = {}
for n=1,5 do
    local item = {
        name = "item"..n,
        id = n,
    }
    setmetatable(item, {__gc = function (self) print("item " .. n .." collected") end})
    myTable[n] = item
end

myTable = nil

collectgarbage()

Conclusion:

item 5 collected
item 4 collected
item 3 collected
item 2 collected
item 1 collected

, item .

+5

. , , , . .

:

myTable = {}
myOtherTable = myTable
for n=1,5 do
    local item = {
        name = "item"..n,
        id = n,
    }
    myTable[n] = item
end

print(myTable)
myTable=nil
print(myTable)
print(myOtherTable)

--OUTPUT
--table: 0x8ebb40
--nil
--table: 0x8ebb40

( ), .

0

All Articles