J'ai récemment mis au point un code pour créer des classes en Lua, que je pense meilleur que celui de base, puisque il gére l'héritage multiple et tout ça en peu de ligne de code!
J'aimerai savoir ce que vous en pensez, et j'essayerai de voir si je peux optimiser le code où ajouter des fonctionnalité plus complexe.
- Code: Tout sélectionner
local setmetatable = setmetatable
local unpack = unpack
local pairs = pairs
local ipairs = ipairs
local string_match = string.match
do
-- __call
local function __call(self,...)
local ins = setmetatable( {}, getmetatable(self) )
for k,v in pairs(self) do
if k ~= "__call" then
ins[k] = v
end
end
if ins.init then ins:init(...) end
return ins
end
-- __is
function is(o,c)
if getmetatable(o) == getmetatable(c) then
return true
else
for i,v in ipairs(o.__parents) do
if v:is(c) then
return true
end
end
end
return false
end
-- __super
function super(ins, superclass)
if ins == superclass then
return superclass
else
return ins.__parents[1]
end
end
-- Class
function Class(...)
-- create the new class table
local c = {__parents={...}, is=is, super=super, __call=__call}
-- inherit all
for i=1,#c.__parents do
for k,v in pairs(c.__parents[i]) do
if not c[k] then
c[k] = v -- copy the parent table content into the new class
end
end
end
return setmetatable(c,c)
end
end -- do block
Et si la fonction class de base vous suffit sur la Ti-Nspire, elle n'existe pas sur PC, donc elle reste toujours utile!