> 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 AS3
http://livedocs.adobe.com/specs/actionscript/3/as3_specification.html

et pour les functions donc je recommande de lire

4.8 Function Closure
http://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 objects
http://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 à