лучший способ сделать по умолчанию param = переменную? - PullRequest
0 голосов
/ 12 марта 2009

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

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, но я не знаю ее во время разработки, поэтому мне нужно это сделать, но это не разрешено во Flex.

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

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

Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 марта 2009

private function applyDiscount(value: Number, discount : Number = Number.POSITIVE_INFINITY){
   if(discount == Number.POSITIVE_INFINITY) discount = _discount;
    return value*discount;
}
1 голос
/ 12 марта 2009

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

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...
...