2016-11-26 2 views
1

Как я могу обойти удаление таблицы, на которую я ссылался?Как удалить ссылочную таблицу в lua?

E.g.

a = { "a" } 
b = a 

-- Removing a, by only using b 

Установка б до нуля просто удалить ссылку, так как я бы удалить таблицу оно ссылается, используя только б?

ответ

2

У вас нет.

Если у кого-то есть ссылка на эту таблицу, то у них есть ссылка на нее. Lua не дает вам возможности в одностороннем порядке удалять чужие вещи.

Теперь вы можете попытаться сделать это, имея кого-то использовать таблицу косвенно:

a = {{"a"}} 
b = a 
a[1][1] == "a" --How to access the table. 
b[1] = nil 
a[1][1] == "a" --Runtime failure, due to `nil` access. 

Как правило, такие виды даны имена, а не числа:

a = {name = {"a"}} 
b = a 
a.name[1] == "a" --How to access the table. 
b.name = nil 
a.name[1] == "a" --Runtime failure, due to `nil` access. 

Но так или иначе, это не остановит кого-то делать это:

a = {name = {"a"}} 
b = a 
local c = a.name --Local storage 
a.name[1] == "a" --How to access the table. 
b.name = nil 
c[1] == "a" --Still works 

Lua не имеет силы, в целом, позволяют вам находить данные других людей и играть со своими вещами.

+0

Спасибо, этот альтернативный пример был очень полезен! – Skere

+0

В теории вы можете вручную искать ** все **, чтобы найти ссылки и отключить их. Однако для этого нет практического использования. – warspyking

Смежные вопросы