最好的方法使默认参数=变量?

时间:2009-03-12 18:54:46

标签: flex actionscript-3 parameters default

我有一个变量,而简洁的功能让它看起来像这样:

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

感谢。

2 个答案:

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