Acho que o efeito desejado é esse:
-- Library function
function inherit(self, ...)
local objects = {...}
for i=1,#objects do
for key,value in pairs(objects[i]) do
if not self[key] then
self[key] = value
end
end
end
end
-- Creature.lua file
Creature = {
name = 'Unknown',
level = 0,
}
function Creature:setName(name)
self.name = name
end
function Creature:getName()
return self.name
end
-- Npc.lua file
Npc = {}
function Npc.create()
local obj = {}
setmetatable(obj, { __index = Npc })
return obj
end
function Npc:getName()
return 'Npc: ' .. self.name
end
inherit(Npc, Creature)
-- Monster.lua file
Monster = {}
function Monster.create()
local obj = {}
setmetatable(obj, { __index = Monster })
return obj
end
function Monster:getName()
return 'Monster: ' .. self.name
end
inherit(Monster, Creature)
-- Test.lua file
-- Creature is an abstract class, we can't create it alone.
--local creature = Creature.create()
--print(creature:getName())
local npc = Npc.create()
npc:setName('Dalvo')
print(npc:getName())
local monster = Monster.create()
monster:setName('Pato Donald')
print(monster:getName())
Npc: Dalvo
Monster: Pato Donald






info
Grupo: Conde
Registrado: 21/12/11
Posts: 750
Reputação: +268
Gênero: Masculino
Essa lib que to fazendo.
Bem a estrutura base dela ja ta 90% pronta e já é funcional.
Antes de mais nada vou apresentar a ideia que gerou ela, e quero sugestões que acrescentem a essa linha da ideia.
Como quem meche com lua sabe, ela nao tem orientação a objeto, e a maioria dos metodos que usam por ai não simula herança, eu quero mudar isso, acho interessante ter herança, e fiz um lib pra isso:
Vm3BqgFT[/pastebin]
Me digam, o que poderia ser adicionado a lib? O que poderia ser melhorado? Quais outros conceitos mais de orientação a objeto seriam interessantes de adicionar.
Agradeço aos que colaborarem. Lembrando que o script será postado ao seu termino.