Literais de tabela
Como no Lua, as tabelas são delimitadas por chaves.
some_values = {1, 2, 3, 4}some_values = {1, 2, 3, 4}Diferente do Lua, atribuir um valor a uma chave em uma tabela é feito com : (em vez de =).
some_values = { name: "Bill", age: 200, ["favorite food"]: "rice"}some_values = { name: "Bill", age: 200, ["favorite food"]: "rice"}As chaves podem ser omitidas se uma única tabela de pares chave-valor está sendo atribuída.
profile = height: "4 feet", shoe_size: 13, favorite_foods: ["ice cream", "donuts"]profile = height: "4 feet", shoe_size: 13, favorite_foods: ["ice cream", "donuts"]Quebras de linha podem ser usadas para delimitar valores em vez de vírgula (ou ambos):
values = { 1, 2, 3, 4 5, 6, 7, 8 name: "superman" occupation: "crime fighting"}values = { 1, 2, 3, 4 5, 6, 7, 8 name: "superman" occupation: "crime fighting"}Ao criar um literal de tabela em uma única linha, as chaves também podem ser omitidas:
my_function dance: "Tango", partner: "none"
y = type: "dog", legs: 4, tails: 1my_function dance: "Tango", partner: "none"
y = type: "dog", legs: 4, tails: 1As chaves de um literal de tabela podem ser palavras-chave da linguagem sem precisar escapar:
tbl = { do: "something" end: "hunger"}tbl = { do: "something" end: "hunger"}Se você está construindo uma tabela a partir de variáveis e deseja que as chaves sejam iguais aos nomes das variáveis, então o operador de prefixo : pode ser usado:
hair = "golden"height = 200person = { :hair, :height, shoe_size: 40 }
print_table :hair, :heighthair = "golden"height = 200person = { :hair, :height, shoe_size: 40 }
print_table :hair, :heightSe você quiser que a chave de um campo na tabela seja o resultado de uma expressão, então pode envolvê-la em [ ], assim como no Lua. Você também pode usar um literal de string diretamente como chave, omitindo os colchetes. Isso é útil se sua chave tiver caracteres especiais.
t = { [1 + 2]: "hello" "hello world": true}t = { [1 + 2]: "hello" "hello world": true}As tabelas Lua têm tanto uma parte array quanto uma parte hash, mas às vezes é útil fazer uma distinção semântica entre as duas. Você pode usar [ ] em vez de { } para declarar explicitamente uma tabela como um array, fazer isso impedirá que quaisquer pares chave-valor sejam escritos dentro dela.
some_values = [1, 2, 3, 4]list_with_one_element = [1, ]some_values = [1, 2, 3, 4]list_with_one_element = [1, ]