2009-03-12 9 views
0

Ich habe eine Variable und eine Funktion der Kürze kann hält es wie folgt aussieht:beste Weise machen Sie default param = eine Variable?

private function applyDiscount (value:Number):Number 
{ 
return value*_discount; //_discount defined somewhere else 
} 

OK, das ist alles schön und gut, aber ich sage, dass die Funktion und in der Lage sein will, kann meinen Eigen nennen passieren Rabatt, aber immer noch _Discount als Standard verwenden.

Ich kann dies tun:

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

Dies wird Rabatt standardmäßig auf 50 machen, aber ich weiß es nicht authortime so dass ich dies tun müssen, aber es ist nicht in Flex erlaubt.

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

Also meine Frage ist, was ist der beste Weg, um das gleiche wie das letzte Beispiel in Flex zu erreichen?

Danke.

Antwort

4

private function applyDiscount(value: Number, discount : Number = Number.POSITIVE_INFINITY){ 
    if(discount == Number.POSITIVE_INFINITY) discount = _discount; 
    return value*discount; 
} 
+0

Wahrscheinlich mehr eine Stilwahl, aber ich bevorzuge normalerweise NaN für Standardargumente, die auf diese Weise ersetzt werden. Im Prinzip ist es näher an Null (die Leute normalerweise für nicht-numerische Standardeinstellungen des gleichen Stils verwenden). – joshtynjala

1

Vielleicht haben Sie den Rabatt als öffentliche Eigenschaft ausgesetzt, so dass Sie es separat auf den Methodenaufruf einstellen können. z

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 
} 

Die zusätzliche Funktion sah doof in den Kommentaren so habe ich es hier hinzugefügt ... Im Grunde könnte man den Rabatt ein optionaler Parameter machen.

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

Nun, ich habe eigentlich 2 Rabatte obwohl der primäre Rabatt, und dann während Promos einen zusätzlichen Rabatt, und ich brauche den ursprünglichen Preis, günstigen Preis und zusätzlichen vergünstigten Preis für den Benutzer angezeigt werden soll. –

+0

Hm das ist nicht, was Sie gefragt haben ... In jedem Fall könnten Sie den Rabatt zu einem optionalen Parameter machen. z.B. Funktion applyDiscount (Wert: Zahl, ... Rest): void { if (rest.length <0) { Rückgabewert * rest [0]; } else { Rückgabewert * _discount; // _ Rabatt definiert woanders } } – Fraser

Verwandte Themen