Si se usan corchetes ('{' y '}') en Lua, ¿para qué se usan?¿Se utilizan llaves en Lua?
Respuesta
literales de mesa.
La tabla es el tipo central en Lua, y puede tratarse como una matriz asociativa (tabla hash o diccionario) o como una matriz ordinaria. Las claves pueden ser valores de cualquier tipo de Lua, excepto nil
, y los elementos de una tabla pueden contener cualquier valor excepto nil
.
El acceso de miembro de matriz se hace más eficiente que el acceso a la tecla de acceso directo detrás de escena, pero los detalles no suelen importar. Eso realmente hace que el manejo de matrices dispersas sea práctico, ya que solo se debe asignar el almacenamiento para aquellas celdas que contienen un valor.
Esto conduce a un idioma universal de matriz basado en 1 que se siente un poco extraño para un programador C.
Por ejemplo
a = { 1, 2, 3 }
crea una matriz almacenado en la variable a
con tres elementos que (casualmente) tienen los mismos valores que sus índices. Debido a que los elementos se almacenan en índices secuenciales que comienzan con 1, la longitud de a
(dada por #a
o table.getn(a)
) es de 3.
Inicialización de una mesa con llaves no enteros se puede hacer de esta manera:
b = { one=1, pi=3.14, ["half pi"]=1.57, [function() return 17 end]=42 }
donde b
tendrá entradas llamadas "one", "pi", "half pi" y una función anónima. Por supuesto, buscar ese último elemento sin iterar en la tabla puede ser complicado a menos que una copia de esa misma función esté almacenada en alguna otra variable.
Otro lugar en el que aparecen las llaves es realmente el mismo significado semántico, pero está oculto (para un nuevo usuario de Lua) detrás de algún azúcar sintáctico. Es común escribir funciones que toman un solo argumento que debería ser una tabla. En ese caso, llamar a la función no requiere el uso de paréntesis. Esto da como resultado un código que parece contener una combinación de ()
y {}
ambos aparentemente utilizados como un operador de llamada a función.
btn = iup.button{title="ok"}
es equivalente a
btn = iup.button({title="ok"})
sino que también es menos difícil en los ojos. Por cierto, llamar a una función de argumento único con un valor literal también funciona para literales de cadena.
list/ditionary constructor (es decir, constructor de tipo de tabla).
No se usan para bloques de código si eso es lo que quieres decir. Para eso Lua simplemente usa la palabra clave final para finalizar el bloque.
Ah, claro, me siento tonto ahora. – Sydius
No hay listas o diccionarios en Lua, sino un tipo de "tabla" que sirve como ambos. Entonces, los corchetes se usan como un constructor de tablas. –
@ Alexander Gladysh: Gracias, ajusté mi respuesta. –
Se utilizan para los literales de mesa del mismo modo que en C:
t = {'a', 'b', 'c'}
Ese es el único caso común. No se usan para delimitadores de bloques.En una tabla lua, puede poner los valores de diferentes tipos:
t={"foo", 'b', 3}
También se pueden utilizar como Diccionarios, a la Python:
t={name="foo", age=32}
- 1. Inicialización objeto agregado temporal que se utilizan llaves
- 2. No se pueden escribir llaves y llaves cuadradas en emacs
- 3. Bloques - ¿llaves/sin llaves?
- 4. ¿Para qué se utilizan parches en SVN?
- 5. ¿Se utilizan sbt.boot.properties en sbt 0.10+?
- 6. ¿Se pueden duplicar las llaves en NSDictionary?
- 7. ¿Qué significa llaves/llaves vacías en Java?
- 8. Javascript - La asignación de múltiples variables a las propiedades de objetos que se utilizan llaves de declaración de variables
- 9. ¿Cómo se puede implementar OO en Lua?
- 10. ¿Cómo se predimensiona una matriz en Lua?
- 11. ¿Cómo se encuentran y se reemplazan las llaves {} en vim?
- 12. Lua, ¿qué es Lua?
- 13. Código de sangría Lua en Lua
- 14. Ocultar llaves en C#
- 15. ¿Las llaves en Python?
- 16. ¿Para qué se utilizan java.awt.Component.getName() y setName()?
- 17. Trace LINQ cuando se utilizan uniones
- 18. ¿Para qué se utilizan las declaraciones dispinterface?
- 19. llaves dobles en perl
- 20. Resharper llaves
- 21. ¿Cómo se definen las sangrías en vim basadas en llaves?
- 22. programación en Lua, objetos
- 23. Incrustar Lua en C++
- 24. ¿Cómo y dónde se utilizan las anotaciones en Java?
- 25. Cómo determinar qué JAR se utilizan en una aplicación
- 26. ¿Cómo se utilizan las marcas bit a bit en C++?
- 27. R - conservar el orden cuando se utilizan operadores coincidentes (% en%)
- 28. ¿Para qué se utilizan los archivos .rc2 en Visual Studio?
- 29. ¿Cómo se utilizan rowTemplate y detailTemplate juntos en KendoUI?
- 30. boxeo cuando se utilizan los genéricos en C#
tenía curiosidad acerca de cómo agregar un preprocesador simple de reemplazarlos con el "do/then" y "end" para hacerlo un poco menos detallado. – Sydius
Eche un vistazo a los filtros token y metalua, ambos a los que se hace referencia frecuentemente en la lista de correo de Lua-L que se encuentra en www.lua.org. Ambas ofrecen formas de modificar el lenguaje en el nivel del árbol de sintaxis abstracta, y podrían ser capaces de hacerlo. Un preprocesador necesitaría analizar mucho para hacerlo bien. – RBerteig