Tengo problemas para mostrar el contenido de una tabla que contiene tablas anidadas (n-profundidad). Me gustaría simplemente descargarlo en el std o en la consola a través de una print
declaración o algo rápido y sucio, pero no puedo entender cómo. Estoy buscando el equivalente aproximado que obtendría al imprimir un NSDictionary
usando gdb.
109
Sé que esta pregunta ya se marcó como respondida, pero permítanme conectar mi propia biblioteca aquí. Se llama inspect.lua y puede encontrarlo aquí:
https://github.com/kikito/inspect.lua
Es solo un archivo único que puede solicitar de cualquier otro archivo. Devuelve una función que transforma cualquier valor de Lua en una cadena legible por humanos:
Sangra las subtablas correctamente y maneja las "tablas recursivas" (tablas que contienen referencias a sí mismas) correctamente, por lo que no entra en bucles infinitos. Ordena los valores de forma sensata. También imprime información de metatabla.
¡Saludos!
fuente
luarocks install inspect
Encontré este útil. Porque si la recursividad también puede imprimir tablas anidadas. No da el formato más bonito en la salida, pero para una función tan simple es difícil de superar para la depuración.
p.ej
Produce la siguiente salida:
fuente
encontró esto:
desde aquí https://gist.github.com/ripter/4270799
funciona bastante bien para mí ...
fuente
La mayoría de las funciones de tabla de impresión lua puras que he visto tienen un problema con la recursividad profunda y tienden a causar un desbordamiento de pila cuando se profundiza demasiado. Esta función de tabla de impresión que he escrito no tiene este problema. También debería ser capaz de manejar tablas realmente grandes debido a la forma en que maneja la concatenación. En mi uso personal de esta función, generó 63k líneas para archivar en aproximadamente un segundo.
La salida también mantiene la sintaxis lua y el script se puede modificar fácilmente para un almacenamiento persistente simple escribiendo la salida en un archivo si se modifica para permitir que solo se formatee tipos de datos numéricos, booleanos, de cadena y de tabla.
Aquí hay un ejemplo:
Salida:
fuente
tab
la función es demasiado complicada. Básicamente es justostring.repeat('\t', amt)
pero mucho menos eficaz.Como se mencionó anteriormente, debes escribirlo. Aquí está mi versión humilde: (super básica)
ejemplo:
salida (Lua 5.0):
fuente
El
table.tostring
método de metalua es realmente muy completo. Se trata de tablas anidadas, el nivel de sangría es modificable, ... Ver https://github.com/fab13n/metalua/blob/master/src/lib/metalua/table2.luafuente
Esta es mi versión que admite la exclusión de tablas y datos de usuario
Esto es un ejemplo
Huellas dactilares:
Tenga en cuenta que la raíz no elimina las exclusiones
fuente
Formatee como JSON (puede "embellecer" en IDE más adelante):
Uso:
Por cierto, también escribí varias otras soluciones: una muy rápida y una con caracteres especiales que se escapan: https://github.com/vn971/fast_json_encode
fuente
Tienes que codificarlo tú mismo, me temo. Escribí esto y puede que te sea de alguna utilidad
fuente
sort
atable.sort
... Debe haber habido unlocal sort = table.sort
lugar en el código de donde se tomó esto.sort
es una copia detable.sort
,strrep
esstring.rep
,strmatch
esstring.match
, etc. Avísame si hay más y voy a cambiar mi respuesta.Hola hombre, escribí un código siple que hace esto en puro Lua, tiene un error (escribe una coma después del último elemento de la lista) pero como lo escribí rápidamente como prototipo te lo dejaré adaptarlo a tu necesidades.
fuente
Añadiendo otra versión. Este también intenta iterar sobre los datos del usuario.
fuente
Utilizo mi propia función para imprimir el contenido de una tabla, pero no estoy seguro de qué tan bien se traduce en su entorno:
fuente
Humildemente modifiqué un poco el código de Alundaio:
luego:
da:
fuente