[Tutorial] Metatables & Metamétodos |
Bolodefchoco « Sénateur » 1515098400000
| 2 | |||||||||||||||||||||||
Metatables & Metamétodos Em lua, há diferentes tipos de meta métodos. Eles realizam funções dentro de uma tabela, e essa tabela que contém um metamethod é chamada de metatable. "Essa meta tabela é uma tabela Lua comum que define o comportamento do valor original sob certas operações especiais. Você pode mudar vários aspectos do comportamento de operações sobre um valor especificando campos específicos em sua meta tabela.", (manual lua) Cada meta método é precedido por dois underscores ( _ ) e o nome do event, como em __event. Sumário de funções: » getmetatable(tabela)
__index(list,index)
Dernière modification le 1517428140000 |
0 | ||
ta [size=0]kkkkkkk |
Bolodefchoco « Sénateur » 1515099240000
| 0 | ||
Ffulanoss a dit : Desculpe. Melhorou? |
Breno 1515099420000
| | ||
[Modéré par Kiwrimai, raison : Comentário sem relação com o tópico.] |
Mescouleur « Citoyen » 1517430180000
| 0 | ||
Parece ser útil |
Bolodefchoco « Sénateur » 1517430240000
| 0 | ||
Mescouleur a dit : E são! Uso bastante hehe |
Mescouleur « Citoyen » 1517436360000
| 0 | ||
Bolodefchoco a dit : basiquez é o meu mundo |
Jp_darkuss « Citoyen » 1579909620000
| 0 | ||
Eu achava que isto era bem difícil, mas é bem fácil, parabéns Bolo. Mas tenho uma dúvida, mesmo tendo um metamétodo, a tabela pode ainda armazenar um valor comum? Pois já tentei usar o valor de uma metatabela e retornou nil '-' |
Bolodefchoco « Sénateur » 1580066280000
| 0 | ||
Jp_darkuss a dit : Não entendi sua pergunta. Manda um exemplo aí |
Jp_darkuss « Citoyen » 1580134980000
| 0 | ||
Bolodefchoco a dit : Assim, digamos que: Code Lua 1 2 3 4 5 6 7 8 9 10 11 local tabela= setmetatable({}, { Entendeu? É como se o valor em tabela[1] nem existisse ' -' Dernière modification le 1580135040000 |
Bolodefchoco « Sénateur » 1580136000000
| 0 | ||
É porque seu newindex só printa.. Você precisa utilizar rawset(tabela, index, value) para definir o valor dentro do metametodo. Essa função ignora metametodos da tabela na hora de setar |
Jp_darkuss « Citoyen » 1580162760000
| 0 | ||
Entendi, obg. |
Gamedroit « Citoyen » 1587660960000
| 0 | ||
Agora que notei, está faltando os metamethods __len e __tostring __len, que foi implementado a partir do Lua versão 5.2, permite gerenciar o tamanho de uma metatable por exemplo: Code Lua 1 2 3 4 5 6 local unknown = {1,2,3} Já __tostring tem a capacidade de manipular o retorno da função tostring(Valor) e como print desfruta da mesma também consequentemente modifica seu resultado no #lua ao imprimir a tabela modificada, por exemplo: Code Lua 1 2 3 4 5 6 7 local unknown = {} |
Bolodefchoco « Sénateur » 1587669240000
| 0 | ||
Este tópico só menciona as metatables que funcionam no Transformice, de contrário seriam inúteis neste fórum. |
Gamedroit « Citoyen » 1587674640000
| 0 | ||
Bolodefchoco a dit : Hm... As que citei não funcionam? Que tristeza o Lua do tfm é pobre mesmo em recursos, não vejo problema em manter as funcionalidades padrões do Lua, a única coisa que a Atelier precisava bloquear seria io e package além da função require Dernière modification le 1587675180000 |