2009-03-12 8 views
0

J'ai une variable et une fonction de brièveté permet de considérer qu'il ressemble à ceci:meilleure façon de faire par défaut param = une variable?

private function applyDiscount (value:Number):Number 
{ 
return value*_discount; //_discount defined somewhere else 
} 

des thats OK bien beau, mais que je veux être en mesure d'appeler cette fonction et être en mesure de passer mon réduction, mais utilisez toujours le _discount par défaut.

Je peux le faire:

private function applyDiscount (value:Number, discount:Number = 50):Number 
    { 
    return value*discount; 
    } 

Cela faire défaut d'escompte à 50 mais je ne sais pas à authortime, alors je dois le faire, mais ce ne est pas autorisé dans Flex.

private function applyDiscount (value:Number, discount:Number = _discount):Number 
    { 
    return value*discount; 
    } 

Donc ma question est, quelle est la meilleure façon d'atteindre le même que le dernier exemple en Flex?

Merci.

Répondre

4

private function applyDiscount(value: Number, discount : Number = Number.POSITIVE_INFINITY){ 
    if(discount == Number.POSITIVE_INFINITY) discount = _discount; 
    return value*discount; 
} 
+0

Probablement plus un choix de style, mais je préfère généralement NaN pour les arguments par défaut qui seront remplacés comme ça. Conceptuellement, c'est plus proche de null (que les gens utilisent généralement pour les valeurs par défaut non numériques du même style). – joshtynjala

1

Peut-être que la remise est exposée en tant que propriété publique, vous pouvez donc la définir séparément pour l'appel de méthode. La fonction supplémentaire a semblé goofy dans les commentaires, donc je l'ai ajouté ici ... Fondamentalement, vous pourriez faire de la remise un paramètre facultatif.

function applyDiscount(value:Number, ... rest):void { 
    if(rest.length > 0) { 
     return value*rest[0]; 
    } else { 
     return value*_discount; //_discount defined somewhere else 
    } 
} 

applyDiscount(100, 10); // 10 discount... 
applyDiscount(100); // default discount... 
+0

Eh bien j'ai fait 2 réductions cependant, la remise primaire, puis au cours d'une réduction supplémentaire des promotions, et je dois afficher le prix initial, le prix réduit, et le prix supplémentaire réduit à l'utilisateur. –

+0

Hm ce n'est pas ce que vous avez demandé ... Dans tous les cas, vous pourriez faire de la réduction un paramètre facultatif. par exemple. function applyDiscount (valeur: nombre, ... reste): void { if (valeur.restante <0) { return value * rest [0]; } else { renvoie la valeur * _discount; // _ discount défini ailleurs } } – Fraser