C'est ce concept de traits qui m'était étranger et rend cette pratique impossible... C'est bien dommage =/
Je vous remercie pour ces super réponses, j'aurais difficilement trouvé plus précis ! Merci beaucoup. On Aug 3, 10:08 pm, zwetan <[email protected]> wrote: > > je te renvoie à la doc pour l'explication des > > traitshttp://help.adobe.com/fr_FR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc5... > > oui ce link est parfait pour comprendre :) > > l'autre link que je vois rarement utilisé est celui de la spec du > langage > AS3http://livedocs.adobe.com/specs/actionscript/3/as3_specification.html > > et pour les functions donc je recommande de lire > > 4.8 Function > Closurehttp://livedocs.adobe.com/specs/actionscript/3/as3_specification33.html > > ---- > A function closure is a function that is neither attached to another > object nor defined as part of a class. > Function closures are first-class objects that can be treated as a > collection of properties or as callable objects. Contrast function > closures with methods, which are functions that are attached to an > object or an instance of a class. > ---- > > 8.3 Function > objectshttp://livedocs.adobe.com/specs/actionscript/3/as3_specification68.html > > où on peut voir un comment de Francis Cheng (le gars qui a écrit cette > spec et apparemment est en train de l updater) > ---- > A class contains two traits objects, one for the class as a whole and > another for the instances of the class. Static methods are stored in > the former and instance methods are stored in the latter. > > This specification uses the term "trait" to mean a property or method > that is fixed rather than dynamic. In other words, any method or > variable that you define in your class definition, be it static or > not, is a fixed property (aka trait). > ---- > > en bref, > une Function closure > - est déclarée dans un slot (comme une variable) > - a une durée de vie par rapport au scope d'execution > - n'a pas vraiment de "this" > > une Function object > - est déclarée dans un trait > - a la durée de vie de la class (si static) ou de l'instance (si > method) > - se rappelle le "this" où elle a été déclarée (cf Function bound) > > donc pour revenir au probleme > > > C'est là que le problème se pose au final... le type int étant un > > objet, ma fonction appelée utilise toujours la même valeur... Y a > > t'il un moyen de transformer cet objet en scalaire ? > > ce n'est pas parce que la value serait object ou scalaire que la value > "order" a toujours la meme valeur > > tu as une methode qui lance un loop > et durant le loop tu assignes des function anonymes pour écouter des > events > > au moment où tu assignes la function anonyme, la valeur "order" > dépends du scope de la method > > mais quand ce loop se termine, et que la method ferme son scope > ta function anonyme qui est toujours en mémoire ne peut plus > référencer "order" > > pas parce que c'est un objet, mais parce que le scope de la methode > est fermé > > et si tu adaptais ce meme code en JavaScript tu aurais le meme > probleme > > un scope de methode et/ou de function n'est pas ouvert indéfiniment > et donc de meme pour une variable locale déclarée dans ce scope > > "order" n'existe que pendant l'execution de la methode > > de plus, meme si tu passais cette variable en static au niveau de la > classe > tu ne pourrais pas avec une seule var maintenir les differentes > valeurs de cette var > > cad si pendant le loop order=1, puis 2, puis 3, etc. > alors que order est une var static > > au moment ou la function anonyme sera appelée order aura la derniere > valeur > qui lui a été assignée > > donc en gros pour maintenir plusieurs etats il te faut un object > > que ce soit une instance de classe ou un object de base > > ------- > var storage:Array = []; > > storage[ order ] = new Something( order ); > > timerInterpretation.addEventListener(TimerEvent.TIMER, storage > [order].displayCardsFromDrawings ) > ------- > > quand l'event appelera la methode, celle-ci etant déclarée sur un > object se rappelera son "this" > > et tu pourras faire un > ---- > var interpretedCardNumber:int = pickedCards[ this.order ]; > ---- > > techniquement le "Something" > peut etre une classe, un object litteral ou une function constructor > > var Something:Function = function( order:Number ) > { > this.order = order > > this.displayCardsFromDrawings = function( event:Event ):void > { > trace( this.order ); > > } > } > > perso je dis que le probleme c'est pas d'utiliser la fonction anonyme > ou d'etre scalaire ou pas, c'est de comment tu veux l'utiliser > > tu presentes ca comme une "limitation" du langage, mais non non > tu l'utilises mal > > un object/instance peut maintenir un "etat" que ce soit dans le > prototype ou le trait > mais pas une fonction anonyme. > > zwetan --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "FCNG" de Google Groupes. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour afficher d'autres options, visitez ce groupe à l'adresse http://groups.google.com/group/FCNG?hl=fr -~----------~----~----~----~------~----~------~--~---
