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
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: 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?
info
Grupo: Conde
Registrado: 30/10/11
Posts: 625
Reputação: +101
Gênero: Masculino

seria interesante com tables(comparação,soma,subtração,etc),isso seria possivel?
Editado Fevereiro 13 por 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.
Editado Fevereiro 14 por dalvorsn
info
Grupo: Conde
Registrado: 05/10/12
Posts: 589
Reputação: +170
Gênero: Masculino
Char no Tibia: Esqueci.

Nossa que maneiro, a pena é que eu não intendo nada disso. Boa REP+
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: 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
info
Grupo: Conde
Registrado: 30/10/11
Posts: 625
Reputação: +101
Gênero: Masculino

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.
info
Grupo: Conde
Registrado: 30/10/11
Posts: 625
Reputação: +101
Gênero: Masculino

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
Editado Fevereiro 16 por 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
info
Grupo: Conde
Registrado: 30/10/11
Posts: 625
Reputação: +101
Gênero: Masculino

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
Grupo: Conde
Registrado: 21/12/11
Posts: 750
Reputação: +268
Gênero: 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:
Editado Fevereiro 12 por dalvorsn