Вот что я на самом деле сделал:
for j,x in ipairs(a) do copy[j] = x end
Как Doub упоминает , если ваши ключи таблицы не являются строго монотонно увеличивающимися, это должно быть pairs
, а не ipairs
.
Я также нашел функцию deepcopy
, которая является более надежной:
function deepcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in next, orig, nil do
copy[deepcopy(orig_key)] = deepcopy(orig_value)
end
setmetatable(copy, deepcopy(getmetatable(orig)))
else -- number, string, boolean, etc
copy = orig
end
return copy
end
Он обрабатывает таблицы и метатаблицы, вызывая себя рекурсивно (, что является его собственной наградой ). Один из умных битов заключается в том, что вы можете передать ему любое значение (будь то таблица или нет), и оно будет скопировано правильно. Однако стоимость заключается в том, что он потенциально может переполнить стек. Поэтому может потребоваться еще более надежная (нерекурсивная) функция .
Но это слишком излишне для очень простого случая, когда нужно скопировать массив в другую переменную.