O assunto struct foi discutidos em Tutorial C: Struct.

Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Simular struct de C.
  2. Utilizar vetor de "struct"
  3. "struct" com função, parâmetro e retorno

A linguagem Lua não possui o tipo de dado struct semelhante à outras linguagens com C , Go e Rust. Porém, com flexibilidade do tipo de dado table podemos simular a idéia de uma struct utilizando o tipo de dado table.

Sintaxe
local nome_variavel = {
  	membro1 = valor1,
	membro2 = valor2
	membroN = valorN
}
Exemplo 1
--simulação de struct anônima
local cidade1 = {
  id=1,
  nome="Shinjuku"
}

print(cidade1.id,var1.nome)
Saída
1	Shinjuku

Para utilizarmos "structs" com vetores é feita da mesma forma como os outros outros tipos de dados. Separamos as "structs" por (,) e delimitados por { e }. Para percorrer o conteúdo do vetor, utilizamos o comando for.

Exemplo 2
--simulação de struct 
local var1 = {
  id=1,
  nome="Shinjuku"
}

--simulação de struct 
local var2 = {
  id=2,
  nome="Akirabara"
}

--vetor structs
local vetor = { var1, var2 }

--exibindo informações de cada struct
for i=1,#vetor,1 do
  local var = vetor[i]
  print(var.id,var.nome)
end
Saída
1	Shinjuku
2	Akirabara

Podemos combinar funções anônimas e a simulação de struct em Lua para usar ponteiros para função em structs. O assunto ponteiro em C pode ser visto em Ponteiros em C.

Sintaxe
local nome_variavel = {
  	membro1 = nome_funcao
}
Exemplo 3
function funcao_qualquer(param)
  return param*2;
end

local var1 = {
  id=1,
  nome="Shinjuku",
  funcao = funcao_qualquer --ponteiro p/ função
}

print(var1.id,var1.nome,var1.funcao(2))
Saída
4

O uso de "struct" como parâmetro e retorno é feita da mesma forma como outros tipos de dados já vistos.

Sintaxe
nome_funcao(nome_variavel_struct)

nome_funcao(parametros)
    return nome_variavel_struct
end
Exemplo 4
local var1 = {
  id=1,
  nome="Shinjuku",
}

function funcao1(param)
  print(param.id,param.nome)
end

function funcao2()
  local var1 = {  id=1,  nome="Shinjuku"}
  return var1
end

funcao1(var1)
retorno = funcao2()
print(retorno.id,retorno.nome)
Saída
1	Shinjuku
1	Shinjuku
  1. 12/09/2024 - revisão 2 - Adição de sintaxe "struct" e função", ajustes gramaticais gerais
  2. 03/10/2023 - revisão 1 - Correção em referências e erros gramaticais
  3. 26/05/2023 - versão inicial