Сделать таблицу Lua равной нулю с помощью функции

Создаю пустую таблицу, т.к. Затем я пытаюсь установить его равным нулю, используя функцию destroy. Во время работы таблица становится равной нулю, но за пределами функции с ней ничего не происходит, пока я явно не установил ее в ноль.

Есть ли способ обнулить таблицу с помощью функции в Lua?

local t = {}

local function destroy(input)
    print("in function",input)
    input = nil
    print("in function",input)
end

print(t)
destroy(t)
print(t)
t = nil
print(t)

person James T.    schedule 14.02.2019    source источник


Ответы (1)


Не существует такой вещи, как «установка таблицы на nil». Вы можете установить для одного из значений внутри таблицы значение nil. Вы можете установить для переменной значение nil. Но вы не можете установить для таблицы nil. Точно так же, как вы не можете установить целое число в nil или установить строку в nil.

Единственный способ установить переменную - это установить эту переменную. input и t - две отдельные переменные. Они оба могут содержать одну и ту же таблицу, но изменения одной переменной не повлияют магическим образом на другую переменную.

Если вы хотите, чтобы destroy имел возможность изменять место, где вызывающий destroy хранил передаваемую таблицу ... вы не можете. Как правило, функция не может влиять на переменные, используемые для ее вызова. Параметры функции содержат значения, взятые из переданных ей аргументов; они не содержат сами переменные хотя бы по той причине, что вам не нужно передавать переменные функции (вы можете передавать результат выражений и т. д., которые не t должны храниться в «переменных»).

Есть конкретные случаи, когда функция может это сделать. В вашем очень конкретном коде, поскольку local t виден функции destroy, она действительно может выполнять t = nil. Однако это работает только в этом конкретном коде; переместите объявление t ниже destroy, и теперь оно не может его достать.

В общем, то, что вы хотите, сделать невозможно.

person Nicol Bolas    schedule 14.02.2019
comment
Аргумент функции - это значение, полученное из выражения. Это случайность, если выражение - просто переменная. - person Tom Blodget; 15.02.2019