Ich habe Probleme beim Anzeigen des Inhalts einer Tabelle, die verschachtelte Tabellen enthält (n-tief). Ich möchte es einfach über eine print
Anweisung oder etwas schnelles und schmutziges auf den Standard oder auf die Konsole werfen, aber ich kann nicht herausfinden, wie. Ich suche nach dem groben Äquivalent, das ich beim Drucken einer NSDictionary
mit GDB erhalten würde.
108
Ich weiß, dass diese Frage bereits als beantwortet markiert wurde, aber lassen Sie mich hier meine eigene Bibliothek einbinden. Es heißt inspect.lua und ist hier zu finden:
https://github.com/kikito/inspect.lua
Es ist nur eine einzelne Datei, die Sie von jeder anderen Datei benötigen können. Es gibt eine Funktion zurück, die einen beliebigen Lua-Wert in eine für Menschen lesbare Zeichenfolge umwandelt:
Untertabellen werden ordnungsgemäß eingerückt und "rekursive Tabellen" (Tabellen, die Verweise auf sich selbst enthalten) werden korrekt behandelt, sodass keine Endlosschleifen entstehen. Es sortiert Werte auf vernünftige Weise. Es werden auch metatable Informationen gedruckt.
Grüße!
quelle
luarocks install inspect
Ich fand das nützlich. Denn bei der Rekursion können auch verschachtelte Tabellen gedruckt werden. Es gibt nicht die schönste Formatierung in der Ausgabe, aber für eine so einfache Funktion ist es schwer zu schlagen für das Debuggen.
z.B
Erzeugt die folgende Ausgabe:
quelle
Ich habe es gefunden:
von hier https://gist.github.com/ripter/4270799
funktioniert ziemlich gut für mich ...
quelle
Die meisten reinen Lua-Drucktabellenfunktionen, die ich gesehen habe, haben ein Problem mit der tiefen Rekursion und neigen dazu, einen Stapelüberlauf zu verursachen, wenn sie zu tief gehen. Diese Drucktabellenfunktion, die ich geschrieben habe, hat dieses Problem nicht. Aufgrund der Art der Verkettung sollte es auch in der Lage sein, wirklich große Tabellen zu verarbeiten. Bei meiner persönlichen Verwendung dieser Funktion wurden 63.000 Zeilen ausgegeben, um sie in etwa einer Sekunde abzulegen.
Die Ausgabe behält auch die Lua-Syntax bei, und das Skript kann leicht für eine einfache dauerhafte Speicherung geändert werden, indem die Ausgabe in eine Datei geschrieben wird, wenn sie so geändert wird, dass nur Datentypen für Zahlen, Boolesche Werte, Zeichenfolgen und Tabellen formatiert werden können.
Hier ist ein Beispiel:
Ausgabe:
quelle
tab
Funktion ist überkompliziert. Es ist im Grunde nur,string.repeat('\t', amt)
aber weit weniger performant.Wie bereits erwähnt, müssen Sie es schreiben. Hier ist meine bescheidene Version: (Super Basic)
Beispiel:
Ausgabe (Lua 5.0):
quelle
Die
table.tostring
Metehod von Metalua ist tatsächlich sehr vollständig. Es handelt sich um verschachtelte Tabellen, die Einrückungsstufe kann geändert werden, ... Siehe https://github.com/fab13n/metalua/blob/master/src/lib/metalua/table2.luaquelle
Dies ist meine Version, die das Ausschließen von Tabellen und Benutzerdaten unterstützt
Dies ist ein Beispiel
Drucke:
Beachten Sie, dass der Stamm keine Ausschlüsse entfernt
quelle
Format als JSON (Sie können es später in der IDE "verschönern"):
Verwendung:
Übrigens habe ich auch mehrere andere Lösungen geschrieben: eine sehr schnelle und eine mit Sonderzeichen: https://github.com/vn971/fast_json_encode
quelle
Sie müssen es leider selbst codieren. Ich habe das geschrieben, und es kann für Sie von Nutzen sein
quelle
sort
zutable.sort
... Es musslocal sort = table.sort
irgendwo im Code eine Stelle gegeben haben, von der dies stammt.sort
ist eine Kopie vontable.sort
,strrep
iststring.rep
,strmatch
iststring.match
usw. Lassen Sie mich wissen, wenn es noch mehr gibt und ich werde meine Antwort ändern.Hallo Mann, ich habe einen Siple-Code geschrieben, der dies in reinem Lua macht. Er hat einen Fehler (schreibe ein Koma nach dem letzten Element der Liste), aber wie ich ihn schnell als Prototyp geschrieben habe, werde ich dir erlauben, ihn an deinen anzupassen Bedürfnisse.
quelle
Hinzufügen einer anderen Version. Dieser versucht auch , über Benutzerdaten zu iterieren.
quelle
Ich verwende meine eigene Funktion, um den Inhalt einer Tabelle zu drucken, bin mir aber nicht sicher, wie gut sie in Ihre Umgebung übersetzt wird:
quelle
Ich habe demütig ein bisschen Alundaio-Code geändert:
dann:
gibt:
quelle