Нет такой вещи, как "установка таблицы на nil
".Вы можете установить одно из значений в таблице на nil
.Вы можете установить переменную на nil
.Но вы не можете установить таблицу на nil
.Точно так же, как вы не можете установить целое число на nil
или установить строку на nil
.
Единственный способ установить переменную - это фактически установить эту переменную.input
и t
- две отдельные переменные.Они оба могут содержать одну и ту же таблицу, но модификации одной переменной не будут магическим образом влиять на другую переменную.
Если вы хотите, чтобы destroy
вообще мог изменить место, где хранился вызывающий destroy
стол передается в ... вы не можете.Функция обычно не может влиять на переменные, используемые для вызова ее .Параметры функции содержат значения, взятые из переданных ей аргументов;они сами не содержат переменных , если только по той причине, что вам не нужно передавать переменные в функцию (вы можете передать результат выражений и т. д., которые недолжны храниться в «переменных»).
Существуют конкретные случаи, когда функция может сделать это.В вашем очень специфическом коде, поскольку local t
видна для функции destroy
, она может фактически выполнять t = nil
.Однако это работает только в этом конкретном коде;переместите объявление t
ниже destroy
, и теперь оно не может его достичь.
В целом, то, что вы хотите, не может быть сделано.