Модуль сереализации/десереализации и печати таблиц Lua

Автор записи: TGB

Сереализация таблицы Lua (со всеми ее, возможно, многоуровневыми вложенностями и перекрестными ссылками) это представление ее в виде строки. Десереализация это обратная операция – восстановление таблицы из строки.

Эти операции могут потребоваться, например, при хранении таблиц на внешнем накопителе или при передачи таблиц между различными скриптами.

Особенность представленного модуля состоит в том, что на вид сереализуемых/десереализуемых таблиц накладываются более слабые ограничения, чем это обычно принято.

--

В модуле реализовано два варианта сереализации/десереализации таблиц Lua:

1) Сереализация/десереализация (функции tbl_to_string и string_to_tbl) таблиц частного вида со следующими ограничениями:

- ключи и поля таблицы только типа : table (простые, не метатаблицы), booleannumberstring;

- все внутренние элементы таблицы (ключи и поля) типа table (ссылки на них) должны быть уникальными (в пределах таблицы с учетом всех ее вложенностей).

2) Сереализация/десереализация (функции tbl_to_str  и str_to_tb ) таблиц общего вида (при условиях,  детально рассмотренных далее в описании модуля), элементами (ключами и полями) которых могут быть любые Lua-типы (включая метатаблицы и ссылки на functionthread, userdata). Связи между элементами таблиц могут быть произвольными.

Кроме того, в модуле реализована функция печати любых Lua-данных, в том числе произвольных таблиц в удобном для анализа виде (со всеми вложенностями и перекрестными связями, включая метатаблицы, а также ссылки на functionthread, userdata).

----

В представленном скрипте-тесте выполняется сереализация/десереализация глобальной таблицы Lua _G, хранящей стандартные и подключаемые пакеты скрипта, все его переменные без спецификации local и т.д. Там же приведены примеры  сереализации/десереализации более простых таблиц, например:

local t1 = {5, 't1'}

local tbl_str = {1, 2

, { 3, 4, {5}, [t1] = '[t1]' }

, [ { {}, '[8]' } ] = {'Простой пример'}

}

------------------------------------------------------

Смотреть полностью...