J'ai du mal à afficher le contenu d'une table qui contient des tables imbriquées (n-deep). Je voudrais simplement le vider sur std ou sur la console via une print
déclaration ou quelque chose de rapide et sale, mais je ne peux pas comprendre comment. Je cherche l'équivalent approximatif que j'obtiendrais lors de l'impression d'un NSDictionary
utilisant gdb.
109
Je sais que cette question a déjà été marquée comme réponse, mais permettez-moi de brancher ma propre bibliothèque ici. Il s'appelle inspect.lua, et vous pouvez le trouver ici:
https://github.com/kikito/inspect.lua
C'est juste un seul fichier que vous pouvez exiger de n'importe quel autre fichier. Il renvoie une fonction qui transforme toute valeur Lua en une chaîne lisible par l'homme:
Il indente correctement les sous-tables et gère correctement les «tables récursives» (tables qui contiennent des références à elles-mêmes), afin de ne pas entrer dans des boucles infinies. Il trie les valeurs de manière sensée. Il imprime également des informations métatable.
Cordialement!
la source
luarocks install inspect
J'ai trouvé celui-ci utile. Parce que si la récursivité, il peut également imprimer des tables imbriquées. Cela ne donne pas le plus joli formatage dans la sortie, mais pour une fonction aussi simple, il est difficile de battre pour le débogage.
par exemple
Produit la sortie suivante:
la source
trouvé ceci:
à partir d'ici https://gist.github.com/ripter/4270799
fonctionne plutôt bien pour moi ...
la source
La plupart des fonctions de table d'impression pure lua que j'ai vues ont un problème de récursivité profonde et ont tendance à provoquer un débordement de pile lorsqu'elles vont trop loin. Cette fonction de table d'impression que j'ai écrite n'a pas ce problème. Il devrait également être capable de gérer des tables très volumineuses en raison de la façon dont il gère la concaténation. Dans mon utilisation personnelle de cette fonction, il a généré 63k lignes dans un fichier en une seconde environ.
La sortie conserve également la syntaxe lua et le script peut facilement être modifié pour un stockage persistant simple en écrivant la sortie dans un fichier si elle est modifiée pour permettre uniquement le formatage des types de données nombre, booléen, chaîne et table.
Voici un exemple:
Production:
la source
tab
la fonction est trop compliquée. C'est fondamentalement justestring.repeat('\t', amt)
mais beaucoup moins performant.Comme mentionné précédemment, vous devez l'écrire. Voici ma version humble: (une super basique)
exemple:
sortie (Lua 5.0):
la source
La
table.tostring
méthode de metalua est en fait très complète. Il traite des tables imbriquées, le niveau d'indentation est modifiable, ... Voir https://github.com/fab13n/metalua/blob/master/src/lib/metalua/table2.luala source
Ceci est ma version qui prend en charge l'exclusion des tables et des données utilisateur
Ceci est un exemple
Impressions:
Notez que la racine ne supprime pas les exclusions
la source
Formater en JSON (vous pouvez "embellir" dans l'IDE plus tard):
Usage:
BTW, j'ai également écrit plusieurs autres solutions: une très rapide et une avec des caractères spéciaux s'échappant: https://github.com/vn971/fast_json_encode
la source
Vous devez le coder vous-même, j'en ai peur. J'ai écrit ceci, et cela peut vous être utile
la source
sort
entable.sort
... Il doit y avoir unlocal sort = table.sort
quelque part dans le code d'où cela a été pris.sort
est une copie detable.sort
,strrep
eststring.rep
,strmatch
eststring.match
etc. Faites-moi savoir s'il y en a d'autres et je modifierai ma réponse.Salut mec, j'ai écrit un siple code qui fait cela en pure Lua, il a un bogue (écrire une virgule après le dernier élément de la liste) mais comment je l'ai écrit rapidement en tant que prototype, je vais vous le laisser l'adapter à votre Besoins.
la source
Ajout d'une autre version. Celui-ci essaie également de parcourir les données utilisateur.
la source
J'utilise ma propre fonction pour imprimer le contenu d'un tableau mais je ne sais pas dans quelle mesure il se traduit dans votre environnement:
la source
J'ai humblement modifié un peu le code Alundaio:
puis:
donne:
la source