Transmettre le …rest à une fonction

29mai 2007

Bon ce n’est pas grand chose, peut-être que tout le monde connait, mais j’ai découvert ça ce soir et je pense que ça peut toujours servir…

Imaginons la chose suivante :
Une fonction récupère deux arguments et les arguments additionnels stockés dans le tableau “rest” (c’est la nouvelle syntaxe d’AS3 qui permet ça).

Seulement, on souhaite appeler une autre fonction en lui transmettant les arguments contenus dans “rest”, ce n’est pas possible, puisque “rest” est un tableau…

function uneFonction(param1, param2, ...rest){ uneAutreFonction(rest); // uneAutreFonction va recevoir un seul argument de type Array... }

Voici la solution que j’ai trouvé sur un forum :
En utilisant la méthode apply de la classe Function, on peut transmettre un tableau d’arguments à une fonction.
Le premier argument de la méthode apply permet de transmettre la référence d’un objet qui sera accessible avec le mot clef “this” dans la fonction (ce que fait la classe Delegate en AS2)

function uneFonction(param1, param2, ...rest){ uneAutreFonction.appy(null, rest); // ici elle va recevoir tout les arguments du tableau rest }

Si en plus on veut regrouper les deux premiers arguments avec le tableau rest, il suffit de faire :

function uneFonction(param1, param2, ...rest){ rest = [param1, param2].concat(rest); uneAutreFonction.appy(null, rest); /* une Autre Fonction va recevoir tout les arguments transmis à uneFonction */ }

Publié dans AS3, Dev |

4 commentaires »

  1. Super util Tobias ! Merci

    Commentaire par Antoine — 1 juin 2007 @ 11:50

  2. En effet c’est pas mal utile. Mais c’est pas nouveau, depuis as1 on pouvais déja faire ça.
    Ca évite de devoir gére des tableau ou des objets en arguments ;)

    Commentaire par Mem's — 9 juin 2007 @ 22:30

  3. lol, tu viens de me faire économiser une bonne centaine de lignes sur des NetConnection call avec ça!
    A noter au passage, “rest” n’est pas un keyword et peut donc être nommée comme on veut.
    ex : function drive(params1, …args)
    thx!

    Commentaire par kikko — 15 mars 2008 @ 19:19

  4. Content de t’avoir fait gagner du temps mon Kikko ! En effet “rest” peut être nommé comme on veut. ce sont les … qui sont importants.

    Commentaire par pingooo — 15 mars 2008 @ 19:34

Flux RSS des commentaires de cet article. TrackBack URI

Laisser un commentaire