Die kurze Antwort ist, dass in Actionscript, die Reihenfolge der Parameter ist Teil einer Funktion Unterschrift ist. Um diese Tatsache zu umgehen, müssen Sie entweder zusätzliche Arbeit verrichten oder sich schlechten Programmierpraktiken hingeben, die Sie später beißen werden. Ich würde sagen, Sie haben zwei "gute" Optionen, um die Flexibilität zu erhalten, die Sie suchen.Der formale Weg wäre, eine Datenklasse zu definieren, die als Parameter der Funktion dient. Das heißt:
public class ComplaintData {
public var state:String = "a stiff";
public var action:String = "voom";
public var type:String = "Norwegian Blue";
public var voltage:String;
public function ComplaintData(v:String) {
voltage = v;
}
}
// somewhere else....
function parrot(cd:ComplaintData) {
trace "-- This parrot wouldn't " + cd.action;
// etc.
}
var cd:ComplaintData = new ComplaintData("a million");
cd.action = "jump";
parrot(cd);
Wenn die Situation ist mehr ad-hoc, eine weniger formale Ansatz ist zügigen Einsatz von optionalen Parameter zu machen, und lassen Sie den Anrufer null passieren für jeden Nicht-Hinter Parameter sie wollen wegzulassen. Diese bekommt man die Flexibilität, aber Sie eine angemessene Menge an Sauberkeit opfern:
function parrot(voltage:String,
state:String=null,
action:String=null,
type:String=null) {
if (state==null) { state = 'a stiff'; }
if (action==null) { action = 'voom'; }
if (type==null) { type = 'Norwegian Blue'; }
// ....
}
parrot('1000')
parrot('1000000', null, 'jump')
Aber wenn diese beiden Optionen unhandlich erscheinen, das ist, weil sie sind. Auf lange Sicht denke ich, dass es letztendlich am besten ist, die Idee zu verinnerlichen, dass geordnete Parameterlisten Teil der Actionscript-Grammatik sind, und es ist wahrscheinlich besser, sie nicht zu vermeiden. Dies opfert entweder Einfachheit (wie oben) oder führt zu schlechten Praktiken (wie die Verwendung unstrukturierter Objekte für Parameter, wie in anderen Antworten vorgeschlagen, was viele Vorteile der Typ- und Fehlerprüfung opfert).
Die ausgewogene Art und Weise mit der Grammatik zu arbeiten, ist verwenden Sie einfach optionale Parameter, wann immer möglich, also:
function parrot(voltage:String,
state:String='a stiff',
action:String='voom',
type:String='Norwegian Blue') {
// ...
}
parrot('1000');
parrot('1000000', 'pushing up the daisies');
parrot('a million', 'bereft of life', 'jump')
Sie noch mit der Tatsache leben müssen, dass nur Hinter Parameter weggelassen werden kann, aber das ist, wie die Sprache wird gemacht (und wie ihre nativen Methoden definiert und verwendet werden).
Sehr interessant. Sie sollten das Code-Snippet von der Site zu Ihrer Antwort hinzufügen. – Soviut
Aber das ist nur ein Parameter-Array. Dies gibt Ihnen keine benannten Parameter oder erlaubt Ihnen, die Reihenfolge der Parameter zu ändern, Parameter auszuschließen usw. – bzlm