6 votes

Définition de la valeur par défaut d'un argument de fonction dans Actionscript 3

Existe-t-il un moyen de référencer une var ou une const comme valeur par défaut d'un argument de fonction dans Actionscript 3.

Je peux définir des valeurs par défaut telles que null, string, int.

function a( b = null ) {
   blah...
}

Mais ce que je veux faire, c'est

function a( b = function(){} ) {
    blah...
}

ce qui semble être possible. Probablement par le biais d'une const

8voto

grapefrukt Points 16804

Curieusement, il semble que vous ne puissiez pas faire cela, du moins je n'ai pas réussi à le faire fonctionner, il n'accepte aucune référence à des fonctions statiques comme valeur par défaut.

Le mieux que j'ai pu faire, c'est ça :

public function myFunction(functionArgument:Function = null):void {
    if (functionArgument != null) {
        functionArgument();
    } else {
        defaultFunction();
    }
}

Par ailleurs, je viens de découvrir qu'il est possible de déclarer des fonctions de cette manière :

public static const STATICFUNC:Function = function():void { trace("i'm static!") };

Mais cela semble fonctionner de la même manière que de les déclarer de façon normale, donc pas de chance là non plus.

1voto

bzlm Points 5500

Les paramètres par défaut doivent être des constantes au moment de la compilation, car le compilateur doit intégrer la valeur par défaut lors de la compilation du code. Cela signifie que les fonctions statiques, aussi prévisibles soient-elles, ne peuvent pas être utilisées comme paramètres par défaut. Les constantes de compilation sont des valeurs que le compilateur connaît en inspectant votre code, mais pas en l'exécutant.

1voto

Theo.T Points 4739

Je suis d'accord avec grapefrukt.

Mais si vous souhaitez créer de nouveaux objets à chaque appel, vous pouvez le faire :

function myFunction(f:Function = null):void
{
    f = (f != null) ? f : function():void{ trace('new function'); }
}

ou bien sûr :

function myFunction(f:Function = null):void
{
    f = (f != null) ? f : defaultFunction; 
}

function defaultFunction():void
{
   trace('default function invoked')
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X