Saya mengalami masalah saat menampilkan konten tabel yang berisi tabel bersarang (n-deep). Saya ingin membuangnya ke std out atau konsol melalui print
pernyataan atau sesuatu yang cepat dan kotor tetapi saya tidak tahu caranya. Saya mencari padanan kasar yang akan saya dapatkan saat mencetak NSDictionary
menggunakan gdb.
109
Saya tahu pertanyaan ini telah ditandai sebagai terjawab, tetapi izinkan saya memasukkan perpustakaan saya sendiri di sini. Ini disebut inspect.lua, dan Anda dapat menemukannya di sini:
https://github.com/kikito/inspect.lua
Itu hanya satu file yang dapat Anda perlukan dari file lain. Ini mengembalikan fungsi yang mengubah nilai Lua apa pun menjadi string yang dapat dibaca manusia:
Ini mengindentasi subtabel dengan benar, dan menangani "tabel rekursif" (tabel yang berisi referensi ke dirinya sendiri) dengan benar, sehingga tidak masuk ke loop tak terbatas. Itu memilah nilai dengan cara yang masuk akal. Ini juga mencetak informasi yang dapat diukur.
Salam!
sumber
luarocks install inspect
Saya telah menemukan yang satu ini berguna. Karena jika di rekursi maka bisa mencetak tabel bersarang juga. Itu tidak memberikan format tercantik dalam output tetapi untuk fungsi sederhana seperti itu sulit dikalahkan untuk debugging.
misalnya
Menghasilkan keluaran sebagai berikut:
sumber
menemukan ini:
dari sini https://gist.github.com/ripter/4270799
bekerja cukup baik untuk saya ...
sumber
Sebagian besar fungsi tabel cetak lua murni yang pernah saya lihat memiliki masalah dengan rekursi yang dalam dan cenderung menyebabkan tumpukan melimpah saat terlalu dalam. Fungsi tabel cetak yang saya tulis ini tidak mengalami masalah ini. Ini juga harus mampu menangani tabel yang sangat besar karena cara menangani penggabungan. Dalam penggunaan pribadi saya dari fungsi ini, itu menghasilkan 63k baris ke file dalam waktu sekitar satu detik.
Keluaran juga mempertahankan sintaks lua dan skrip dapat dengan mudah dimodifikasi untuk penyimpanan persisten sederhana dengan menulis keluaran ke file jika dimodifikasi untuk memungkinkan hanya tipe data angka, boolean, string dan tabel yang akan diformat.
Berikut ini contohnya:
Keluaran:
sumber
tab
fungsi terlalu rumit. Ini pada dasarnya hanyastring.repeat('\t', amt)
tetapi kinerjanya jauh lebih sedikit.Seperti yang disebutkan sebelumnya, Anda harus menulisnya. Ini adalah versi saya yang sederhana: (yang super dasar)
contoh:
keluaran (Lua 5.0):
sumber
The
table.tostring
metehod dari metalua sebenarnya sangat lengkap. Ini berkaitan dengan tabel bersarang, tingkat indentasi dapat diubah, ... Lihat https://github.com/fab13n/metalua/blob/master/src/lib/metalua/table2.luasumber
Ini adalah versi saya yang mendukung pengecualian tabel dan data pengguna
Ini sebuah contoh
Cetakan:
Perhatikan bahwa root tidak menghapus pengecualian
sumber
Format sebagai JSON (Anda dapat "mempercantik" di IDE nanti):
Pemakaian:
BTW, saya juga menulis beberapa solusi lain: solusi yang sangat cepat , dan satu dengan karakter khusus yang lolos: https://github.com/vn971/fast_json_encode
sumber
Anda harus mengkodekannya sendiri, saya khawatir. Saya menulis ini, dan mungkin berguna bagi Anda
sumber
sort
ketable.sort
... Pasti ada suatulocal sort = table.sort
tempat di kode tempat ini diambil.sort
adalah salinan daritable.sort
,strrep
isstring.rep
,strmatch
isstring.match
dll. Beri tahu saya jika ada lagi dan saya akan mengubah jawaban saya.Hai sobat, saya menulis kode siple yang melakukan ini di Lua murni, ia memiliki bug (tulis koma setelah elemen terakhir dari daftar) tetapi bagaimana saya menulisnya dengan cepat sebagai prototipe, saya akan membiarkannya untuk Anda menyesuaikannya dengan Anda kebutuhan.
sumber
Menambahkan versi lain. Yang ini juga mencoba untuk melakukan iterasi melalui userdata.
sumber
Saya menggunakan fungsi saya sendiri untuk mencetak konten tabel tetapi tidak yakin seberapa baik itu diterjemahkan ke lingkungan Anda:
sumber
Saya dengan rendah hati telah mengubah sedikit kode Alundaio:
kemudian:
memberikan:
sumber