У меня проблемы с отображением содержимого таблицы, содержащей вложенные таблицы (глубиной n). Я хотел бы просто выгрузить его на стандартный вывод или в консоль с помощью print
оператора или чего-то быстрого и грязного, но я не могу понять, как это сделать. Я ищу приблизительный эквивалент, который я бы получил при печати с NSDictionary
использованием gdb.
109
Я знаю, что этот вопрос уже отмечен как ответ, но позвольте мне подключить сюда мою собственную библиотеку. Он называется inspect.lua, и вы можете найти его здесь:
https://github.com/kikito/inspect.lua
Это всего лишь один файл, который вы можете запросить из любого другого файла. Он возвращает функцию, которая преобразует любое значение Lua в удобочитаемую строку:
Он правильно выполняет отступы для вложенных таблиц и правильно обрабатывает «рекурсивные таблицы» (таблицы, которые содержат ссылки на себя), поэтому он не попадает в бесконечные циклы. Он разумно сортирует ценности. Он также печатает метатабельную информацию.
С уважением!
источник
luarocks install inspect
Я нашел это полезным. Потому что при рекурсии он может печатать и вложенные таблицы. Это не дает наилучшего форматирования на выходе, но для такой простой функции ее трудно превзойти при отладке.
например
Производит следующий вывод:
источник
нашел это:
отсюда https://gist.github.com/ripter/4270799
у меня неплохо работает ...
источник
Большинство чистых табличных функций печати lua, которые я видел, имеют проблему с глубокой рекурсией и, как правило, вызывают переполнение стека, когда заходят слишком глубоко. Эта функция таблицы печати, которую я написал, не имеет этой проблемы. Он также должен быть способен обрабатывать действительно большие таблицы из-за того, как он обрабатывает конкатенацию. В моем личном использовании этой функции она выводила 63 тыс. Строк в файл примерно за секунду.
Вывод также сохраняет синтаксис lua, и сценарий можно легко изменить для простого постоянного хранения, записав вывод в файл, если он изменен, чтобы разрешить форматирование только числовых, логических, строковых и табличных типов данных.
Вот пример:
Вывод:
источник
tab
функция слишком сложна. Это в основном справедливо,string.repeat('\t', amt)
но гораздо менее эффективно.Как упоминалось ранее, вы должны это написать. Вот моя скромная версия: (супер базовая)
пример:
вывод (Lua 5.0):
источник
table.tostring
Metehod из metalua на самом деле очень полный. Он имеет дело с вложенными таблицами, уровень отступов можно изменять, ... См. Https://github.com/fab13n/metalua/blob/master/src/lib/metalua/table2.luaисточник
Это моя версия, которая поддерживает исключение таблиц и пользовательских данных.
Это пример
Печать:
Обратите внимание, что корень не удаляет исключения
источник
Форматировать как JSON (позже в IDE можно "украсить"):
Использование:
Кстати, я также написал несколько других решений: очень быстрое и одно с экранированием специальных символов: https://github.com/vn971/fast_json_encode
источник
Боюсь, вы должны сами это кодировать. Я написал это, и это может быть вам полезно
источник
sort
наtable.sort
... Должно быть,local sort = table.sort
где-то в коде есть место, откуда это взято.sort
является копиейtable.sort
,strrep
естьstring.rep
,strmatch
естьstring.match
и т. д. Сообщите мне, если они появятся, и я изменю свой ответ.Привет, человек, я написал простой код, который делает это на чистом Lua, в нем есть ошибка (напишите кому после последнего элемента списка), но как я написал его быстро в качестве прототипа, я позволю вам адаптировать его к вашему потребности.
источник
Добавление другой версии. Этот также пытается перебирать пользовательские данные.
источник
Я использую свою собственную функцию для печати содержимого таблицы, но не уверен, насколько хорошо она соответствует вашей среде:
источник
Я скромно изменил код Alundaio:
затем:
дает:
источник