2008-12-12 9 views
6

Est-il possible que je peux faire référence à un var ou const comme la valeur par défaut pour un argument de fonction dans actionscript 3.Paramètre Valeur par défaut de l'argument de la fonction dans actionscript 3

Je peux définir des valeurs par défaut comme une chaîne nulle, int.

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

Mais ce que je veux faire est

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

dont il semble qu'il y aurait une façon de le faire. Vraisemblablement grâce à un const

Répondre

8

Assez curieusement, il semble que vous ne pouvez pas le faire, au moins je ne pouvais pas le faire fonctionner, il n'acceptera aucune référence aux fonctions statiques comme valeur par défaut.

Le mieux que je pouvais faire était le suivant:

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

En tant que sidenote je viens de découvrir que vous en fait peut déclarer des fonctions comme ceci:

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

Mais cela semble fonctionner de la même façon comme les déclarant la voie saine, donc pas de chance là non plus.

+0

est-il pas plus conventionnel d'écrire: publique fonction statique STATICFUNC(): void { trace ("Im static!"); } –

+0

OOPS. Doit être une erreur mais il ne devrait pas y avoir de parenthèse après functionArgument() et defaultFunction() car nous ne voulons pas le résultat de la fonction mais une référence à la fonction elle-même? –

1

Les paramètres par défaut doivent être des constantes de compilation, car le compilateur doit mettre la valeur par défaut lorsque le code est compilé. 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 sans l'exécuter.

1

Je suis d'accord avec grapefrukt.

Mais au cas où vous voulez 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') 
} 
Questions connexes