Pregunta

Tengo una variable, y una función de brevedad permite considerar que se ve así:

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

OK, eso está muy bien, pero digamos que quiero poder llamar a esa función y poder pasar mi propio descuento, pero aún usar el _discount como predeterminado.

PUEDO hacer esto:

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

Esto hará que el descuento sea predeterminado a 50, pero no lo sé en el tiempo de ejecución automático, así que necesito hacer esto, pero no está permitido en Flex.

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

Entonces mi pregunta es, ¿cuál es la mejor manera de lograr lo mismo que el último ejemplo en Flex?

Gracias.

¿Fue útil?

Solución


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

Otros consejos

Tal vez exponga el descuento como propiedad pública para que pueda configurarlo por separado para la llamada al método por ejemplo

public function get discount():Number{ 
    return _discount; 
} 

public function set discount(param:Number):void { 
    _discount = param; 
}

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

La función adicional se veía tonta en los comentarios, así que la he agregado aquí ... Básicamente, podría hacer que el descuento sea un parámetro opcional.

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...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top