La sintaxis normal para indexar una tabla es t[val]
. Solo para claves de cadena, Lua proporciona una sintaxis alternativa , donde t.foo
es exactamente equivalente a t["foo"]
. Esto es puramente una conveniencia sintáctica, llamada 'azúcar sintáctica'. No agrega funcionalidad, solo te proporciona una sintaxis menos complicada para usar cadenas como campos con nombre.
Hay muchas llaves cadenas esto no funcionará para:
t["hello_world"] => t.hello_world -- works
t["hello world"] => t.hello world -- oops, space in the string
t["5 * 3"] => t.5 * 3 -- oops
t['[10]'] => t.[10] -- oops
Básicamente sólo funciona si la clave de cadena sería un identificador válido.
Una vez más, las tablas se indexan a través []
, y en la mayoría de los casos es necesario utilizar ellos:
t = {
-- [key] = value
[10] = "ten", -- number key, string value
["print function"] = print, -- string key, function value
["sub table"] = {}, -- string key, table value
[print] = 111, -- function key, number value
["foo"] = 123, -- string key, number value
}
Sólo si está utilizando una clave de cadena que funcionaría como un identificador válido (sin espacios, contiene solo caracteres de palabras, números o subrayados, y no comienza con un número) puede usar la sintaxis de acceso directo. Para la tabla anterior, que sería única 'foo':
t = {
-- [key] = value
[10] = "ten", -- number key, string value
["print function"] = print, -- string key, function value
["sub table"] = {}, -- string key, table value
[print] = 111, -- function key, number value
foo = 123, -- string key, number value
}
Así que es básicamente una forma sintáctica de diferenciar entre "el valor de var" y el "valor var" :) Gracias por su respuesta, creo Entiendo ahora. Creo que prefiero la forma de hacer las cosas de Ruby (siempre requiere la clave completa, sin atajos, pero tiene una sintaxis abreviada para cadenas identificables) – kikito