Caramba, sensacional. Pra ser sincero, eu nem sabia que tinha um jeito de fazer operações com as strings.
É possível fazer com outros valores? Usando os metamétodos?
info
Group: Infante
Joined: 13/10/08
Posts: 1.6k
Reputation: +420
Tibia Character: Demonbholder

Caramba, sensacional. Pra ser sincero, eu nem sabia que tinha um jeito de fazer operações com as strings.
É possível fazer com outros valores? Usando os metamétodos?
seria interesante com tables(comparação,soma,subtração,etc),isso seria possivel?
Edited Fevereiro 13 by lordbug99
Caramba, sensacional. Pra ser sincero, eu nem sabia que tinha um jeito de fazer operações com as strings.
É possível fazer com outros valores? Usando os metamétodos?
Sim, number, só que o procedimento é um pouco diferente.
debug.setmetatable(0, {
__index = function(self, key) print(self, key) end,
__len = function(self) print(self) end,
__call = function(self, ...) print(self, ...) end
--etc
})
local _ = #(1000)
local _ = (1000)("arg1", "arg2")
local _ = (1000)[500]
Dependendo da sua criatividade, da pra fazer algo legal para os numeros :>
Bollean, table, function não consegui fazer, userdata e thread não tentei.
#Edit
Corrigindo, consegui agora usar com function, mas por algum motivo que desconheço, o metodo __call não altera.
debug.setmetatable(function()end, {
__index = function(self, key) print(self, key) end,
__len = function(self) print(self) end,
__call = function(self, ...) print(self, ...) end
--etc
})
function new() print "vish" end
local _ = new[1]
local _ = #new
local _ = new()
seria interesante com tables(comparação,soma,subtração,etc),isso seria possivel?
Não, porque o tipo table tem metatable independente, cada tabela pode possuir sua própria metatable.
Edited Fevereiro 14 by dalvorsn
info
Group: Conde
Joined: 05/10/12
Posts: 589
Reputation: +170
Gender: Masculino
Tibia Character: Esqueci.

Nossa que maneiro, a pena é que eu não intendo nada disso. Boa REP+
info
Group: Barão
Joined: 18/10/10
Posts: 246
Reputation: +89
Tibia Character: Elite Pamcadaum

Nossa Dalvo, só tenho uma coisa a te falar cara: Meus parabéns, ótimo jeito de utilizar os metamétodos, ficou muito legal bro, na boa [:.
Me add no Skype depois bro '-': MaXwEllDeN
Nossa Dalvo, só tenho uma coisa a te falar cara: Meus parabéns, ótimo jeito de utilizar os metamétodos, ficou muito legal bro, na boa [:.
Me add no Skype depois bro '-': MaXwEllDeN
ty e tá add la flor
Não, porque o tipo table tem metatable independente, cada tabela pode possuir sua própria metatable.
eu pensei num metodo pra isso,mas é meio pog e falho, da pra atribui uma metatable a _G e usa newindex pra checa o type e atribui uma mettable,mas n funciona em variaveis locais e se reafirma a varivel ela fica sem metatable.
Não, porque o tipo table tem metatable independente, cada tabela pode possuir sua própria metatable.
eu pensei num metodo pra isso,mas é meio pog e falho, da pra atribui uma metatable a _G e usa newindex pra checa o type e atribui uma mettable,mas n funciona em variaveis locais e se reafirma a varivel ela fica sem metatable.
Até entendi seu ponto de vista, acho que poderia até dar certo, mas o trabalho que daria fora a quantidade de bugs poderia tornar inviavel. Assim que puder tentarei fazer isso e lhe digo se é viável ou não.
Até entendi seu ponto de vista, acho que poderia até dar certo, mas o trabalho que daria fora a quantidade de bugs poderia tornar inviavel. Assim que puder tentarei fazer isso e lhe digo se é viável ou não.
funciona,funciona o problema é que n funciona em em locais e quando re-utiliza uma varivel
para as locais daria pra cria uma varivel antes e iguala a local a varivel
eu tinha feito poucos teste,mas fora isso n vi nenhum bug,vo da mais umas testas
outro problema e quando usa algo do tipo {{}},tbm fica sem mesmo usando newindex na nova tabela
Edited Fevereiro 16 by lordbug99
Até entendi seu ponto de vista, acho que poderia até dar certo, mas o trabalho que daria fora a quantidade de bugs poderia tornar inviavel. Assim que puder tentarei fazer isso e lhe digo se é viável ou não.
funciona,funciona o problema é que n funciona em em locais e quando re-utiliza uma varivel
para as locais daria pra cria uma varivel antes e iguala a local a varivel
eu tinha feito poucos teste,mas fora isso n vi nenhum bug,vo da mais umas testas
outro problema e quando usa algo do tipo {{}},tbm fica sem mesmo usando newindex na nova tabela
fiz inumeros testes aqui e nenhum teve êxito total
quando declarar a variavel como global da pra setar newindex, e nas de dentro é só verificar se é table e setar e nas tables das tables dentro, isso não é o problema, o problema é quando ou a tabela é declarada como local, ou é simplesmente usada, sem previamente declarar:
local tab = {}
print(tab * {})
print({} - {})
nenhum desses casos chama o metametodo newindex
eu pensei em checa as tableas dentro,mas problematico por tem que checa recursividade,se a de dentro ja tem metatable.
pensei em muda as funções de getpos e coloca pra já seta metatable,mas dai tem as pos que vem como arg de funções como onStepIn e tals,então acho que o melhor é o que o MaXwEllDeN uso(cria uma função pra seta a metatable),mas colocaria pra qualquer table,n só as de pos.
info
Group: Conde
Joined: 21/12/11
Posts: 750
Reputation: +268
Gender: Masculino
Biblioteca Auxiliar String
aNs7gidD[/pastebin]
Exemplos de Uso
• Metamétodo __index:
Input:
Output:
• Metamétodo _unm:
Input:
Output:
• Metamétodo __call:
Input:
Output:
• Metamétodo __add:
Input:
print("x" + "tibia")Output:
• Metamétodo __sub:
Input:
print("xtibia" - "tibia")Output:
• Metamétodo __mul:
Input:
print("xtibia" * 5)Output:
Edited Fevereiro 12 by dalvorsn