Сереализация таблицы Lua (со всеми ее, возможно, многоуровневыми вложенностями и перекрестными ссылками) это представление ее в виде строки. Десереализация это обратная операция – восстановление таблицы из строки.
Эти операции могут потребоваться, например, при хранении таблиц на внешнем накопителе или при передачи таблиц между различными скриптами.
Особенность представленного модуля состоит в том, что на вид сереализуемых/десереализуемых таблиц накладываются более слабые ограничения, чем это обычно принято.
--
В модуле реализовано два варианта сереализации/десереализации таблиц Lua:
1) Сереализация/десереализация (функции tbl_to_string и string_to_tbl) таблиц частного вида со следующими ограничениями:
- ключи и поля таблицы только типа : table (простые, не метатаблицы), boolean, number, string;
- все внутренние элементы таблицы (ключи и поля) типа table (ссылки на них) должны быть уникальными (в пределах таблицы с учетом всех ее вложенностей).
2) Сереализация/десереализация (функции tbl_to_str и str_to_tb ) таблиц общего вида (при условиях, детально рассмотренных далее в описании модуля), элементами (ключами и полями) которых могут быть любые Lua-типы (включая метатаблицы и ссылки на function, thread, userdata). Связи между элементами таблиц могут быть произвольными.
Кроме того, в модуле реализована функция печати любых Lua-данных, в том числе произвольных таблиц в удобном для анализа виде (со всеми вложенностями и перекрестными связями, включая метатаблицы, а также ссылки на function, thread, userdata).
----
В представленном скрипте-тесте выполняется сереализация/десереализация глобальной таблицы Lua _G, хранящей стандартные и подключаемые пакеты скрипта, все его переменные без спецификации local и т.д. Там же приведены примеры сереализации/десереализации более простых таблиц, например:
local t1 = {5, 't1'}
local tbl_str = {1, 2
, { 3, 4, {5}, [t1] = '[t1]' }
, [ { {}, '[8]' } ] = {'Простой пример'}
}
------------------------------------------------------