Estou tendo problemas para exibir o conteúdo de uma tabela que contém tabelas aninhadas (n-deep). Eu gostaria de apenas despejá-lo no std out ou no console por meio de um print
comunicado ou algo rápido e sujo, mas não consigo descobrir como. Estou procurando o equivalente aproximado que obteria ao imprimir um NSDictionary
usando gdb.
109
Eu sei que esta pergunta já foi marcada como respondida, mas deixe-me conectar minha própria biblioteca aqui. É chamado de inspect.lua, e você pode encontrá-lo aqui:
https://github.com/kikito/inspect.lua
É apenas um único arquivo que você pode solicitar de qualquer outro arquivo. Ele retorna uma função que transforma qualquer valor Lua em uma string legível por humanos:
Ele recua as subtabelas corretamente e lida com "tabelas recursivas" (tabelas que contêm referências a si mesmas) corretamente, de modo que não entre em loops infinitos. Ele classifica os valores de forma sensata. Ele também imprime informações meta-tabelas.
Saudações!
fonte
luarocks install inspect
Eu achei este útil. Porque se a recursão pode imprimir tabelas aninhadas também. Não dá a formatação mais bonita na saída, mas para uma função tão simples, é difícil superar a depuração.
por exemplo
Produz a seguinte saída:
fonte
encontrei isto:
daqui https://gist.github.com/ripter/4270799
funciona muito bem para mim ...
fonte
A maioria das funções de tabela de impressão lua pura que eu vi têm um problema com recursão profunda e tendem a causar um estouro de pilha quando indo muito fundo. Esta função de tabela de impressão que escrevi não tem esse problema. Também deve ser capaz de lidar com tabelas realmente grandes devido à maneira como lida com a concatenação. No meu uso pessoal desta função, ela gerou 63k linhas para arquivar em cerca de um segundo.
A saída também mantém a sintaxe lua e o script pode ser facilmente modificado para armazenamento persistente simples, gravando a saída em um arquivo se modificado para permitir que apenas os tipos de dados numéricos, booleanos, de string e de tabela sejam formatados.
Aqui está um exemplo:
Resultado:
fonte
tab
função é complicada demais. É basicamente justo,string.repeat('\t', amt)
mas com muito menos desempenho.Como mencionado anteriormente, você deve escrevê-lo. Aqui está minha versão humilde: (super básica)
exemplo:
saída (Lua 5.0):
fonte
O
table.tostring
metehod de metalua é realmente muito completo. Ele lida com tabelas aninhadas, o nível de recuo é alterável, ... Veja https://github.com/fab13n/metalua/blob/master/src/lib/metalua/table2.luafonte
Esta é a minha versão que suporta a exclusão de tabelas e dados do usuário
Isto é um exemplo
Impressões:
Observe que a raiz não remove exclusões
fonte
Formate como JSON (você pode "embelezar" no IDE posteriormente):
Uso:
A propósito, eu também escrevi várias outras soluções: uma muito rápida e outra com caracteres especiais de escape: https://github.com/vn971/fast_json_encode
fonte
Você tem que codificar sozinho, infelizmente. Eu escrevi isso, e pode ser de alguma utilidade para você
fonte
sort
paratable.sort
... Deve haverlocal sort = table.sort
algum lugar no código de onde isso foi tirado.sort
é uma cópia detable.sort
,strrep
éstring.rep
,strmatch
éstring.match
etc. Informe-me se houver mais e alterarei minha resposta.Oi cara, eu escrevi um código simples que faz isso em Lua pura, ele tem um bug (escreva um coma após o último elemento da lista) mas como eu escrevi rapidamente como um protótipo, vou deixar para você adaptá-lo ao seu necessidades.
fonte
Adicionando outra versão. Este tenta iterar sobre os dados do usuário também.
fonte
Eu uso minha própria função para imprimir o conteúdo de uma tabela, mas não tenho certeza se ela se traduz bem em seu ambiente:
fonte
Modifiquei humildemente um pouco o código do Alundaio:
então:
dá:
fonte