POO 1 – Metatables

8 réflexions au sujet de “POO 1 – Metatables”

  1. Salut,
    J’avoue avoir abandonné les ateliers Lua, quand David a abordé le sujet.
    Merci beaucoup pour ces éclaircissements sur les metatables.
    Vivement la suite.

  2. Très beau boulot, c’est bien détaillé et facile à comprendre ! 😉

    Pour ton code :
    `for _, v in ipairs(listElements) do
    if v:update() ~= nil then
    v:update(dt)
    end
    end`

    Je pense que ton dt passe à nil à cause de cette ligne :
    `if v:update() ~= nil then`

    Pour moi, ce que t’as voulu faire c’est vérifier si v contenait la méthode update et si elle existe tu voulais l’exécuter….

    Sauf que quand tu fais ça comme ça, ça ne vérifie pas si v contient la fonction update mais ça exécute la fonction update contenue dans v (sans envoyer de paramètre) !

    Et vu que tu n’as certainement aucun return à la fin de ton update et bien la valeur retournée est forcément == nil…

    Donc finalement ton code exécuté est celui ci : `if v:update() ~= nil then`
    Et non pas celui-là : `v:update(dt)`

    Je ne sais pas si mon explication est très claire, dis moi si ça ne l’est pas j’essayerais d’expliquer ça autrement.

    En tout cas merci de ton partage, j’attends la suite avec hâte 🙂

  3. En complément… Désolé j’ai posté trop vite sans te donner la syntaxe de ce que tu voulais faire x)

    for _, v in ipairs(listElements) do
    if v.update ~= nil then
    v:update(dt)
    end
    end

    Sans mettre de parenthèses dans ta condition de if et en mettant un ‘.’ à la place d’un ‘:’, il vérifie que la fonction update existe dans v…

    Si jamais tu indiques des parenthèses, il interprète ça comme une demande d’exécuter la fonction.

    Si tu mets les : sans parenthèses il va te jeter à la compilation par contre.

  4. Salut,

    Merci pour ton commentaire, c’est tout ce qu’il fallait pour que je comprenne réellement le pourquoi de ce bug. 🙂 Par contre je comprends pas comment je n’ai pas pu y songer plus tôt ! ^^’

    Pour info je viens de mettre à jour le code avec ta solution.

  5. Bonjour Cherubchucky,

    Merci pour ton bel effort de pédagogie, cependant pour l’instant je ne vois pas en quoi l’utilisation des métatables sera une simplification de l’atelier Gui ? Cela viendra certainement dans la suite.

    Pourrais-tu s’il te plait mettre dans ton prochain devlog 2 exemples de code faisant la même chose dans l’implémentation du Gui avec ta méthode et celle de David pour comparer ?

    Merci à toi.

  6. Salut S3v@l,

    Ca ne sera pas une simplification de l’atelier GUI mais une autre manière de le coder. Celle-ci permettra juste de personnaliser certains comportements et de pouvoir faire dériver des classes de classes « parent ». Par exemple la classe « text » aura les comportements spécifiques à sa propre classe mais également ceux propres à la classe « panel ». Normalement ça devrait être plus clair à partir du prochain devlog. 🙂

    Pour la comparaison des deux codes, j’ai déjà prévu de le faire. Mais ça ne sera qu’à partir du troisième devlog. Je fournirai même le code complet pour ceux que ça intéresse, code que j’améliorerai au fur et à mesures des devlogs.

  7. Merci Cherubchucky pour ton travail c’est toujours intéressant de voir d’autres approches pour traiter un sujet.

Laisser un commentaire

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.