O que é uma Metatabela?
Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 16 de 54.
Uma metatable é simplesmente uma tabela Lua comum, mas ela tem um propósito especial. Quando você anexa uma metatable a outra tabela (vamos chamá-la de tabela "principal"), você pode alterar como essa tabela principal se comporta quando certas operações são realizadas nela.
Pense da seguinte forma: normalmente, se você tentar somar duas tabelas usando o operador +, o Lua não saberá o que fazer e retornará um erro. Mas com uma metatable, você pode definir o que a adição significa para suas tabelas. Você poderia fazer com que ela somasse valores correspondentes, concatenasse seus conteúdos ou fizesse qualquer outra coisa que faça sentido para o seu programa.
As metatables 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 metatable, ele verifica se a metatable possui o metamétodo correspondente e o utiliza para determinar o que deve acontecer.
Este conceito abre possibilidades como a criação de tipos de dados personalizados com seus próprios comportamentos, a implementação de padrões orientados a objetos, a proteção de tabelas contra modificações indesejadas e muito mais. Nas próximas lições, você aprenderá como anexar metatabelas a tabelas e usar metamétodos para personalizar seu comportamento.
Folha de consulta
Uma metatable é uma tabela Lua comum que pode ser anexada a outra tabela para alterar seu comportamento em certas operações.
Metatables usam funções especiais chamadas metamethods com nomes que começam com dois sublinhados:
__add- define o comportamento de adição__index- define o comportamento para a busca de chaves ausentes
Quando uma operação é realizada em uma tabela com uma metatable, o Lua verifica o metamethod correspondente e o utiliza para determinar o comportamento.
Metatables permitem:
- Criar tipos de dados personalizados com comportamentos específicos
- Implementar padrões orientados a objetos
- Proteger tabelas contra modificações indesejadas
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 Logic & Flow
1Iteração Avançada de Tabelas
Iterando com pairs()Iterando com ipairs()pairs() vs. ipairs()Revisão - Ficha de Personagem4Introdução às Metatabelas
O que é uma Metatabela?setmetatable & getmetatableO Metamétodo __indexO Metamétodo __newindexO Metamétodo __tostringMetamétodos Aritméticos Parte 1Metamétodos Aritméticos Parte 2Recapitulação - Tabela Somente Leitura2Mais Funções da Biblioteca Table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRecapitulação - Placar de recordes