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
-~----------~----~----~----~------~----~------~--~---

Répondre à