Сделать Lua таблицы ноль через функцию - PullRequest
0 голосов
/ 14 февраля 2019

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

Есть ли способ установить для таблицы значение nil с помощью функции в 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)

1 Ответ

0 голосов
/ 14 февраля 2019

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

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

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

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

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

...