Mam problem z wyświetleniem zawartości tabeli zawierającej tabele zagnieżdżone (n-deep). Chciałbym po prostu zrzucić to na standardowe wyjście lub konsolę za pomocą print
instrukcji lub czegoś szybkiego i brudnego, ale nie mogę dowiedzieć się, jak. Szukam przybliżonego odpowiednika, który dostałbym podczas drukowania NSDictionary
przy użyciu gdb.
109
Wiem, że to pytanie zostało już oznaczone jako udzielone, ale pozwól mi podłączyć tutaj moją własną bibliotekę. Nazywa się inspect.lua i możesz go znaleźć tutaj:
https://github.com/kikito/inspect.lua
To tylko jeden plik, którego możesz wymagać z dowolnego innego pliku. Zwraca funkcję, która przekształca dowolną wartość Lua w ciąg czytelny dla człowieka:
Wcina odpowiednio podtabele i poprawnie obsługuje „tabele rekurencyjne” (tabele, które zawierają odniesienia do siebie samych), więc nie dostaje się do nieskończonych pętli. Sortuje wartości w rozsądny sposób. Drukuje również metatable informacji.
Pozdrowienia!
źródło
luarocks install inspect
Uważam, że ten jest przydatny. Ponieważ rekurencja może również wypisać zagnieżdżone tabele. Nie zapewnia najładniejszego formatowania na wyjściu, ale w przypadku tak prostej funkcji trudno ją przebić w przypadku debugowania.
na przykład
Daje następujący wynik:
źródło
Znajdź to:
stąd https://gist.github.com/ripter/4270799
działa dla mnie całkiem nieźle ...
źródło
Większość czystych funkcji tabeli drukowania lua, jakie widziałem, ma problem z głęboką rekursją i ma tendencję do powodowania przepełnienia stosu, gdy wchodzisz zbyt głęboko. Ta funkcja tabeli drukowania, którą napisałem, nie ma tego problemu. Powinien także być w stanie obsługiwać naprawdę duże tabele ze względu na sposób, w jaki obsługuje konkatenację. W moim osobistym użyciu tej funkcji wyprowadzało 63k wierszy do pliku w ciągu około sekundy.
Dane wyjściowe zachowują również składnię lua, a skrypt można łatwo zmodyfikować w celu prostego trwałego przechowywania, zapisując dane wyjściowe do pliku, jeśli zostanie zmodyfikowany, aby umożliwić formatowanie tylko typów danych liczbowych, logicznych, łańcuchowych i tabel.
Oto przykład:
Wynik:
źródło
tab
funkcja jest zbyt skomplikowana. Zasadniczo jest to sprawiedliwe,string.repeat('\t', amt)
ale znacznie mniej wydajne.Jak wspomniano wcześniej, musisz to napisać. Oto moja skromna wersja: (super podstawowa)
przykład:
wyjście (Lua 5.0):
źródło
table.tostring
Metehod z metalua jest rzeczywiście bardzo kompletne. Zajmuje się tabelami zagnieżdżonymi, poziom wcięć jest zmienny, ... Zobacz https://github.com/fab13n/metalua/blob/master/src/lib/metalua/table2.luaźródło
To jest moja wersja, która obsługuje wykluczanie tabel i danych użytkownika
To jest przykład
Wydruki:
Zauważ, że root nie usuwa wykluczeń
źródło
Sformatuj jako JSON (możesz później „upiększyć” w IDE):
Stosowanie:
Swoją drogą napisałem też kilka innych rozwiązań: bardzo szybkie i takie ze znakami specjalnymi uciekającymi: https://github.com/vn971/fast_json_encode
źródło
Obawiam się, że musisz sam to zakodować. Napisałem to i może ci się to przydać
źródło
sort
natable.sort
... Musiało byćlocal sort = table.sort
gdzieś w kodzie, skąd to zostało wzięte.sort
jest kopiątable.sort
,strrep
jeststring.rep
,strmatch
jeststring.match
itd. Daj mi znać, jeśli będzie ich więcej, a zmienię odpowiedź.Cześć stary, napisałem kilka kodów, które robią to w czystym Lua, ma błąd (napisz komę po ostatnim elemencie listy) ale jak szybko napisałem jako prototyp, pozwolę ci dostosować go do twojego wymagania.
źródło
Dodanie kolejnej wersji. Ten próbuje również iterować po danych użytkownika.
źródło
Używam własnej funkcji do drukowania zawartości tabeli, ale nie jestem pewien, jak dobrze przekłada się ona na twoje środowisko:
źródło
Skromnie zmodyfikowałem trochę kod Alundaio:
następnie:
daje:
źródło