CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

lua metatable

Shiba_the_Inu
Shiba_the_Inu
Niveau 84
10 avril 2021 à 11:59:11

Coucou, testant 56 langage ( :hap:) y'a le lua et kotlin qui me plaîsent bien en ce moment à côté de js car ils ont quelques similitudes, et love2d me permet de faire des petits logiciels sympa pas trop lourd + i/o plus intéressante (le moindre programme js qui fait mini 50mo :/ )

Mais bref, j'ai un petit soucis à comprendre les metatables de lua ?

Quelqu'un pourrait expliquer, simplement et avec une exemple concret pour quelqu'un qui a du mal à réfléchir scientifiquement svp, car je ne comprends pas l'intérêt pour le moment ? Vous pouvez également faire un parallèle avec JS ou C/C++ puisque je les connais assez bien.
J'ai regardé ce cours :
http://wxlua.free.fr/Tutoriel_Lua/Tuto/Metatables/metatables3.php
et d'autres en fr/anglais, mais je pige vraiment pas.

Je veux dire, pour l'exemple qui est montré, j'arrive au même résultat en faisant juste :
-- local foo = {5}; local bar = {10}; -- function foobar(a, b) return unpack(a) + unpack(b); end -- local myNumber = foobar(foo, bar); -- print("myNumber : "..myNumber); --output : 'my Number : 15'

Je pensais au début que c'était un peu un équivalent à .prototype. en js, mais j'ai pas l'impression ?
Bref, help please ? :snif:

Message édité le 10 avril 2021 à 12:02:44 par Shiba_the_Inu
Guybrush81
Guybrush81
Niveau 10
10 avril 2021 à 18:15:01

Les métatables c'est "le truc" de lua, et dans le cas de __add, ca se rapproche de la surchage d'opérateur en c++ (par exemple).

Donc oui tu peux le faire avec une fonction qui prends comme arguments 2 tables, mais tu perd le "sucre syntaxique", c'est à dire la possibilité d'écrire
c = a + b

mais aussi le fait de devoir connaitre quelle fonction ajoute quoi avec quoi, j'hésite à faire le rapprochement avec les templates du c++ (car trop souvent en lua les gens essais de la POO, alors que ca n'est pas l'idée).

dans le liens, quand on écrit:
print(unpack(t1 + t2))

On n'a pas besoin de connaitre la fonction à utiliser pour l'addition, puisqu'elle doit être dans la métatable de t1, alors que si tu le fait avec une fonction foobar tu es obligé de l'appeler explicitement.
Après c'est un exemple, donc le code n'est pas très intéressant.

Un exemple qui le serait un peu plus ca serait d'imaginer la meme chose avec des vecteur 2D et 3D par exemple, et de définir une fonction lerp comme ca :
function lerp(a, b, x) return a * (1.0 - x) + b * x end

Elle fonctionne avec des nombre et des tables qui ont une metatable definissant __add et __mul.

Shiba_the_Inu
Shiba_the_Inu
Niveau 84
10 avril 2021 à 19:47:41

Mmm, va falloir que je fasse des tests alors parce que ça reste encore un peu ambigü.
Par exemple, ce que je comprends pas trop c'est qu'on ne spécifie dans le lien que t1 avec mt pour la metatable, et pas t2, mais le compilateur réussi à faire fonctionner ça avec t2 parce qu'il a la même "structure" ? (à savoir un int en t1[1] et t2[1]) ? ou alors je suis à côté de la plaque ?

Shiba_the_Inu
Shiba_the_Inu
Niveau 84
11 avril 2021 à 11:09:05

Bon, après avoir passé quelques heures dessus et vu des tutos sur youtube je viens de comprendre un peu mieux, il s'agit de remplacer le comportement du code de base des opérateur etc... je pensais un peu plus à la base à la création de prototype façon js.
En tout cas ça peut être intéressant, je te remercie pour ton aide.

Guybrush81
Guybrush81
Niveau 10
12 avril 2021 à 09:10:05

Alors je ne connais pas précisément la notion de prototype en java, donc je pourrais pas te dire si c'est proche ou non.

Mais pour revenir à ta première réponse, le compilateur n'a pas besoin de savoir si la structure de la table t1, c'est dynamique et c'est quand le code est exécuté qu'il y a le test pour savoir si une table a une clé spécifique (aussi bien pour la table, que la metatable d'ailleurs, qui peut elle aussi avoir une metatable, etc).

Et pour finir Love2D c'est pas mal du tout je trouve, on peut meme faire des shader glsl (et de la 3D!) super simplement, bref, j'aime bien aussi!

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment