Krikroff Posté(e) le 22 mai 2014 Signaler Posté(e) le 22 mai 2014 Un abus de langage de la part de Fibaro concernant les "variables globales" a embrouillé notre ami ici. Mais oui tu as raison Lazer pour le concept , la notion de portée des variables c'est la base. Et pour te rejoindre j'ajouterais bien que l'absence de typage des variables * n'arrange pas les choses d’ailleurs il peut-être utile parfois de vérifier le type d'une variable avant de l'utiliser ! * LUA utilise un typage dynamique c'est à dire que le type est défini automatiquement en fonction de la valeur.
JossAlf Posté(e) le 22 mai 2014 Auteur Signaler Posté(e) le 22 mai 2014 Oui c'est perturbant du coup le côté permissif... j'avais pas mesuré tout la portée de la chose...
Steven Posté(e) le 22 mai 2014 Signaler Posté(e) le 22 mai 2014 Portée des variables LUA (en anglais) : http://www.lua.org/pil/4.2.html Contrôle de type de variable : http://www.lua.org/pil/2.html local id = 1 if ( type(id) == "number" ) then local booo = 1 + id fibaro:debug(booo) --- 2 else -- J'en fait quoi moi de ce truc bizarre qui n'est même pas numérique. end 2
JossAlf Posté(e) le 22 mai 2014 Auteur Signaler Posté(e) le 22 mai 2014 Merci encore à tous ! Tout s'éclaire enfin. En tout cas je me rends compte qu'avec mon incompréhension de l'utilisation du panneau de variables, je me bornais à déclarer toutes mes variables au fil de mon code en LOCALE et déclarais mes variables globales dans le panneau de variables !!! Pffff le boulet ! Tu m'étonnes que je me soit pris le mur hier soir ! Je vais pouvoir enfin revenir à une utilisation normale du LUA sans réinventer la portée des variables ! Je commençais à devenir fou là . Au sujet de la portée des variables, tout est là : http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/LUA_Scope_Variables.html Extrait : Portées des variables, définitionLes programmes sont morcelés en unités de code, comme pour les fonctions et les modules. Dans ces unités nous pouvons créer des variables et leur affecter des valeurs de sorte que nous puissions traiter des données et faire que le programme exécute une tâche donnée. Pour un certain nombre de raisons (conflits de noms, information cahée, etc...) nous pouvons vouloir isoler des variables dans les unités. Nous pouvons également vouloir créer des variables provisoires pour une tâche qui peuvent être supprimées une fois celle-ci terminée. Le terme "unité" est peu un vague. Nous employons le terme portée des variables pour décrire le jeu de code dans lequel un ensemble de variables sont disponible. Les variables auxquels nous avons accès sont dites visibles. La portée d'une variable est le bloc contenant le code dans lequel elle est visible. Les portées sont créées et détruites pendant que le programme exécute ces blocs de code. Les variables contenues dans ces blocs sont créées et détruites selon les règles décrites ci-après. Quand nous écrivons un bloc et une nouvelle portée nous écrivons une portée locale. Les portées externes sont visibles des portées locale mais pas le contraire.
JossAlf Posté(e) le 22 mai 2014 Auteur Signaler Posté(e) le 22 mai 2014 (modifié) Steven. T'es tordu hein ?! oups Je suis tordu mais toi aussi... -- J'en fait quoi moi de ce truc bizarre qui n'est même pas numérique. Modifié le 22 mai 2014 par JossAlf 2
JossAlf Posté(e) le 22 mai 2014 Auteur Signaler Posté(e) le 22 mai 2014 Je crois que je vais me reposer un peu. Vous imaginez même pas les noeuds au cerveau que je viens de me faire. J'avais seulement rayé l'usage normal des variables globales à cause de ce foutu panneau de variables ... Vous imaginez programmer sans globale ?! Put... j'ai du mérite que mes codes tournent !!! Arf je flippe à l'idée d'en reprendre certains...
JossAlf Posté(e) le 22 mai 2014 Auteur Signaler Posté(e) le 22 mai 2014 Tiens je vois plus comment indiquer que le sujet est résolu ? (Faut que je me repose ...)
Steven Posté(e) le 22 mai 2014 Signaler Posté(e) le 22 mai 2014 Je programme sans aucune global enfin presque ... enfin sauf une ... celle qui fait tout if (not GEA) then GEA = {} GEA.version = 3.30 GEA.checkEvery = 30 ... GEA.add = function(id, secondes, message, ...) ... end end Seule la variable GEA est global tout le reste est local à la variable GEA. Allez fait moi plaisir ... dis moi que je rajoute des noeuds à ton cerveau
JossAlf Posté(e) le 22 mai 2014 Auteur Signaler Posté(e) le 22 mai 2014 Ha tu me cherches hein ?! Un autre truc dans le genre tordu : player = "001" local player = "003" fibaro:debug(player) Affichage du debug : 003 (c'est donc la locale qui est retenue puisque la dernière déclarée) Mais je fais comment pour retrouver ma Globale ? 001 ?
Lazer Posté(e) le 22 mai 2014 Signaler Posté(e) le 22 mai 2014 Tu lui donnes un nom différent, comme ça pas d’ambiguïté
JossAlf Posté(e) le 22 mai 2014 Auteur Signaler Posté(e) le 22 mai 2014 Oui c'est sur ! Mais j'attends qd même la réponse de Steven !
Lazer Posté(e) le 22 mai 2014 Signaler Posté(e) le 22 mai 2014 Ah mais t'es aussi tordu que lui en fait
Steven Posté(e) le 22 mai 2014 Signaler Posté(e) le 22 mai 2014 function getPlayer() return player end player = "001" local player = "003" fibaro:debug(player) fibaro:debug(getPlayer()) Lol
JossAlf Posté(e) le 22 mai 2014 Auteur Signaler Posté(e) le 22 mai 2014 pfff (tu as a mis une majuscule à player -> Ca peut pas marcher) Bon allé j'arrête @Lazer Merci encore à tous. 1
Tomzebest Posté(e) le 10 septembre 2014 Signaler Posté(e) le 10 septembre 2014 Merci JossAlf d'avoir bien rédigé ce qui te torturait le cerveau et d'avoir illustré les réponses par plusieurs exemples ^^ J'y vois plus clair aussi! J'avais un début de réponse dans la tête mais des choses m'échappaient aussi! J'ai enfin eu le temps de me poser pour lire la suite de ton investigation! Merci aux maîtres Steven et Krikroff forcément :60: 1
JossAlf Posté(e) le 10 septembre 2014 Auteur Signaler Posté(e) le 10 septembre 2014 Houla Tom ! V'la le petit déterrage Merci pour ta reconnaissance Envoyé de mon iPhone àl'aide de Tapatalk 1
Messages recommandés