#57590
Stormbringer
Participant

Re salut eRaven,

C’est bizarre parce que ton code fonctionne bien chez moi et pas d’erreur de local.
par acquis de conscience je te mets l’appel depuis mon main.lua ou autre source à ta convenance.

main.lua


local PERSO = require"PERSO"
local perso
local hero
perso = PERSO.create("Capitaine Hadock")
print("nom du personnage :",perso:GetName()) -- retourne TEST car tu ne transmets pas le nom donné en argument à ta fonction Initialize(). Si tu vveux le faire : Initialize(perso, pNom)

hero = PERSO.create("superman")
print("nom du hero :",hero:GetName()) --idem

sinon pour tes questions dans le code :
1 – non, ce n’est pas pareil car ici tu instancies une nouvelle table qui sera la metatable de ta classe. Elle contiendra l’ensemble des objets ensuite créés.
2 – je me serts des fonctions locales pour faire des traitement internes comme des fonctions private en C#, java, C++ …
3 – effectivement pour un initialize() externe ca peut être pratique pour réinitialiser tes variables avec un objet déjà créé. Tu veux RAZ l’objet pour le remettre dans un état initial.
4 – Non, le setmetatable référence ta metatable et non ta table « objet » PERSO. C’est différent.
5 – Oh que si le return est obligatoire, sinon tu auras une erreur de référencement.

En espérant t’avoir aidé.
Voilà. fait moi un retour de ça.
A++