O que é uma Metatabela?
Parte da seção Lógica e Fluxo do Journey de Lua da Coddy. Lição 16 de 54.
Uma metatabela é simplesmente uma tabela Lua comum, mas tem uma finalidade especial. Quando você associa uma metatabela a outra tabela (vamos chamá-la de tabela "principal"), pode alterar o comportamento dessa tabela principal quando determinadas operações são realizadas nela.
Pense desta forma: normalmente, se você tentar somar duas tabelas usando o operador +, Lua não saberá o que fazer e exibirá um erro. Mas, com uma metatabela, você pode definir o que a adição significa para suas tabelas. Você pode fazer com que ela some os valores correspondentes, concatene seus conteúdos ou faça qualquer outra coisa que faça sentido para o seu programa.
As metatabelas funcionam definindo funções especiais chamadas metamétodos. Esses metamétodos têm nomes específicos que começam com dois sublinhados, como __add para adição ou __index para procurar chaves ausentes. Quando o Lua encontra uma operação em uma tabela que possui uma metatabela, ele verifica se a metatabela tem o metamétodo correspondente e o utiliza para determinar o que deve acontecer.
Esse conceito abre possibilidades como criar tipos de dados personalizados com seus próprios comportamentos, implementar padrões orientados a objetos, proteger tabelas contra modificações indesejadas e muito mais. Nas próximas lições, você aprenderá a associar metatabelas a tabelas e usar metamétodos para personalizar seu comportamento.
Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Iteração avançada de tabelas
Iterando com pairs()Iterando com ipairs()pairs() vs. ipairs()Revisão - Ficha de personagem2Mais funções da biblioteca table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRevisão - Placar de pontuações máximasPratique por conta própria: Compilador de Lua online