0

我有一个变量,为了简洁起见,我们认为它看起来像这样:

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 中最后一个示例相同的最佳方法是什么?

谢谢。

4

2 回答 2

4

private function applyDiscount(value: Number, discount : Number = Number.POSITIVE_INFINITY){
   if(discount == Number.POSITIVE_INFINITY) discount = _discount;
    return value*discount;
}
于 2009-03-12T19:50:24.820 回答
1

也许将折扣公开为公共属性,以便您可以将其单独设置为方法调用。例如

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...
于 2009-03-12T19:05:10.857 回答