Обычный синтаксис для индексации таблицы - t[val]
.Только для строковых ключей Lua предоставляет синтаксис альтернативный , где t.foo
в точности эквивалентно t["foo"]
.Это чисто синтаксическое удобство, так называемый «синтаксический сахар».Он не добавляет функциональности, он просто дает вам менее загроможденный синтаксис для использования строк в качестве именованных полей.
Существует множество строковых ключей, для которых не будет работать:
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
В основном это работает только в том случае, если строковым ключом будет действительный идентификатор.
Опять же, таблицы индексируются через []
, и в большинстве случаев вам нужно использовать их:
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
}
Только если вы используете строковый ключ, который будет работать как действительный идентификатор (без пробелов, содержит только символы слов, цифры или подчеркивания и не начинается с цифры), вы можете использовать синтаксис ярлыка.Для приведенной выше таблицы это будет только '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
}