Metatabelas Lua
Neste artigo, exploraremos o conceito de metatabelas Lua , como usá-las e alguns exemplos práticos.
As tabelas que definem o comportamento de outras tabelas são conhecidas como metatabelas.
Lua Metatables – O que são?
A metatabela Lua é uma tabela associada a outra tabela e que fornece funcionalidade adicional a essa tabela.
Uma metatabela pode ser usada para personalizar o comportamento de tabelas de várias maneiras, como alterar como Lua realiza operações aritméticas nelas ou adicionar novos métodos e propriedades às tabelas.
As metatabelas também podem ser usadas para criar tipos de dados personalizados em Lua e para implementar técnicas de programação orientada a objetos.
Em Lua, toda tabela pode ter uma metatabela associada a ela, e essa metatabela pode ser acessada e modificada usando as funções setmetatable e getmetatable.
A função setmetatable define a metatabela de uma tabela, enquanto a função getmetatable recupera a metatabela de uma tabela.
Setmetatable(tabela,metatabela)
Este método define a metatabela de uma tabela. Aqui ' table ' é a tabela cuja metatabela deve ser definida e ' metatable ' é a nova metatabela a ser atribuída à tabela.
O exemplo a seguir ilustra a função setmetatable() em Lua:
Example:
Getmetatable(tabela)
Example:
Metamétodos Lua
Metamétodos são métodos especiais em Lua associados a metatabelas e definem o comportamento de operadores e funções internas quando aplicados a tabelas.
Em outras palavras, os metamétodos fornecem uma maneira de estender ou modificar o comportamento dos operadores e funções integrados de Lua quando aplicados a tabelas.
Metatabelas Lua devem primeiro ser criadas como tabelas regulares antes de poderem ser usadas.
Existem vários metamétodos em Lua, cada um correspondendo a um operador ou função interna específica.
Um ou mais dos seguintes metamétodos devem ser incluídos nesta tabela:
__índice
Usado quando uma chave inexistente é usada para indexar a tabela.
Aqui está um exemplo que usa o metamétodo __index :
Example:
__newindex
Quando um novo índice é definido em uma tabela, essa função é chamada.
O exemplo abaixo examina o método __newindex em Lua:
Example:
__para sequenciar
Este método nos permite definir como um objeto deve ser convertido em uma string quando é impresso.
Este método é chamado pela função tostring() quando é chamado em um objeto.
O exemplo a seguir simplifica o entendimento do método __toString :
Example:
__adicionar
Esta função é chamada quando dois valores são adicionados.
Vamos explorar um exemplo onde _add é implementado:
Example:
__sub
Este método é acionado quando dois valores são subtraídos com o operador – .
O exemplo abaixo mostra a implementação do metamétodo __sub em Lua:
Example:
__mul
Este método é invocado quando dois valores são multiplicados usando o operador *.
O exemplo a seguir fornece uma visão geral do metamétodo __mul em Lua:
Example:
__div
Este método é chamado se dois valores forem divididos usando um operador / .
O método __div é demonstrado no exemplo abaixo:
Example:
__mod
Usado quando dois valores são divididos usando o operador % .
O exemplo a seguir implementa o metamétodo __mod em Lua:
Example:
__Pancada
Essa função é chamada quando um valor é elevado à potência de outro usando o operador ^ .
Vamos entender o metamétodo __pow usando um exemplo:
Example:
__unm
Essa função é invocada quando um valor é negado usando o operador – .
Agora vamos explorar o metamétodo __unm usando um exemplo:
Example:
__eq
Acionado quando dois valores são comparados usando o operador == .
O exemplo abaixo explica melhor o metamétodo __eq em Lua:
Example:
__lt
Executado quando dois valores são comparados usando o operador < .
Usando este exemplo, o metamétodo __lt em Lua é implementado:
Example:
__le
Quando dois valores são comparados usando o operador <= , esta função é chamada.
Este exemplo é usado para examinar o metamétodo __le em Lua:
Example:
__chamar
Example:
Benefícios das Metatabelas Lua
Lua Metatables oferece vários benefícios, incluindo:
- As metatabelas permitem personalizar o comportamento das tabelas em Lua. Isso pode ser usado para implementar vários paradigmas de programação, como programação orientada a objetos, ou para adicionar funcionalidade personalizada às tabelas.
- Ao definir metatabelas, você pode reutilizar o mesmo código em várias tabelas, em vez de escrever o mesmo código repetidamente.
- As metatabelas Lua permitem estender a funcionalidade dos tipos integrados de Lua, como tabelas e números. Isso pode ser útil ao trabalhar com estruturas de dados complexas ou ao implementar funcionalidades específicas de domínio.
- As metatabelas Lua podem ser usadas para fornecer uma camada de segurança para programas Lua, impedindo o acesso a certos métodos ou propriedades de tabelas.
- As metatabelas Lua podem ser usadas para otimizar o desempenho de programas Lua, fornecendo implementações personalizadas de operações comuns, como indexação e operações aritméticas.