лучший способ сделать параметр по умолчанию = переменной?

StackOverflow https://stackoverflow.com/questions/639994

Вопрос

У меня есть переменная и функция, для краткости давайте рассмотрим, что это выглядит следующим образом:

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

Хорошо, это все прекрасно, но допустим, я хочу иметь возможность вызывать эту функцию и передавать свою собственную скидку, но по-прежнему использовать _discount по умолчанию.

Я МОГУ это сделать:

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

Это сделает скидку по умолчанию равной 50, но я не знаю этого в authortime, поэтому мне нужно это сделать, но это не разрешено в Flex.

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

Итак, мой вопрос в том, каков наилучший способ добиться того же, что и в последнем примере в Flex?

Спасибо.

Это было полезно?

Решение


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

Другие советы

Возможно, предоставьте скидку как общедоступное свойство, чтобы вы могли установить ее отдельно для вызова метода.например, g

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
}

Дополнительная функция выглядела бестолковой в комментариях, поэтому я добавил ее сюда...В принципе, вы могли бы сделать скидку необязательным параметром.

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...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top