Lua таблицы хранят элементы, не являющиеся массивами, в произвольном порядке. А распаковка бесполезна без некоторого контроля над порядком сгенерированных элементов. Поэтому невозможно распаковать полезную часть таблицы без массива.
Теперь вы все еще можете это сделать; Вы просто не будете иметь никакого контроля над заказом. Так что не ясно, какой смысл, но код будет выглядеть следующим образом:
function unpack_unordered_recursive(tbl, key)
local new_key, value = next(tbl, key)
if new_key == nil then return end
return value, unpack_unordered_recursive(tbl, new_key)
end
function unpack_unordered(tbl)
local key, value = next(tbl)
if key == nil then return end
return value, unpack_unordered_recursive(tbl, key)
end
Однако, если у вас есть таблица массивов, которая содержит список ключей для извлечения и порядок их извлечения в , затем вы можете написать функцию распаковки, которая использует такую таблицу:
function unpack_indices(tbl, indices, curr_ix)
if curr_ix == nil then
return unpack_indices(tbl, indices, 1)
end
if curr_ix > #indices then
return
end
--Recursive call
return tbl[indices[curr_ix]], unpack_indices(tbl, indices, curr_ix + 1)
end
print("t:", unpack_indices(t, {"b", "a"}))