我有一个变量,而简洁的功能让它看起来像这样:
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中最后一个示例相同的最佳方式是什么?
感谢。
答案 0 :(得分:4)
private function applyDiscount(value: Number, discount : Number = Number.POSITIVE_INFINITY){
if(discount == Number.POSITIVE_INFINITY) discount = _discount;
return value*discount;
}
答案 1 :(得分:1)
可能将折扣公开为公共财产,因此您可以将其单独设置为方法调用。 e.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...