лучший способ сделать параметр по умолчанию = переменной?
-
11-07-2019 - |
Вопрос
У меня есть переменная и функция, для краткости давайте рассмотрим, что это выглядит следующим образом:
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...