AS3: deklarieren Sie eine "undefined" - parameter für int, uint oder Zahl
Möchte ich die Umsetzung der folgenden Logik:
function setMyValue (myVar:int = undefined):void
{
if (myVar == undefined)
{
/* Generate a value for myVar */
}
else
{
/* Use the supplied value for myVar */
}
}
Also, wenn der Wert angegeben ist, verwenden Sie es. Wenn nicht, erzeugen. Scheint einfach genug.
Problem ist, dass AS3 nicht wie diese. 'undefined' wird genötigt in die '0', so myVar ist nie undefiniert. Ich habe versucht, Variationen mit NaN, null, etc, aber nichts hat funktioniert. Die einzige Unordnung, die ich denken kann, der spontan ist, liefern einige "Magische Zahl" zu verwenden, als Standard, aber das ist hässlich. Wer weiß eine bessere Lösung?
Dank!
Ah, OK, die Zahl ist etwas anders. Nummer Standardwert NaN, so dass die Instanz behandelt werden können mit isNaN(myVar). Wollen immer noch zu lösen, für " int " und "uint", obwohl.
InformationsquelleAutor Wikiup | 2009-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPD (aus meinem Kommentar): Es ist sicherlich nicht eine gute Praxis, wählen Sie eine Magische Zahl, um anzuzeigen, Wert fehlen, es sei denn, Sie können sich völlig sicher, dass diese Magische Zahl nicht erscheinen würden als Ergebnis einige Arithmetik (was im Allgemeinen wahr ist). So ist der beste Ansatz hier ist entweder auf eine größere Art als
int
(z.B.Number
), oder einige flag (Boolean
Wert) Funktion, sowieint
, um anzuzeigen tatsächlichen Wert fehlen. Die Wahl sollte davon abhängen, ob Sie möchten, unterstreichen die Bedeutung der Tatsache, dass der übergebene Wert ist ein integraler Bestandteil.Wenn Sie sich wohl fühlen mit dem ausbau der argument-Typ, dann sollten Sie
NaN
und tun Sie dies:Dass sowohl mehr technisch korrekt, und es ist auch stabiler. Es wird auch ermöglichen es Ihnen zu stark Typ zur compile-Zeit und würde nicht dazu führen, seltsame bugs, wie im Falle der Verwendung von
Object
.Beachten Sie, dass dies nicht funktionieren wird, mit
int
als eine der Antworten vermuten lässt.int
hat nur numerische Werte, undNaN
erhalten genötigt zu 0. Benötigen SieNumber
geben.Wenn Sie besorgt über die Leistung - nicht sein. Mit
Number
stattint
oderuint
ist in der Regel OK.UPD: Wenn Sie wollen, um explizit zu Kennzeichnen, dass argument sein sollte integraler verwenden Sie einfach zusätzliche fahne und genauen Typ, es wäre viel klarer.
Weitere option definieren Sie Ihre eigene Art mit Zusatznutzen, z.B.
MaybeInt
ist, die hält integer-Wert und ein flag (ob es tatsächlich initialisiert wurde oder nicht). Auf diese Weise würde man ein deutliches signal, dass der Wert von integral-oder no-Wert. Dieser Ansatz kann jedoch ein bisschen sperrig.Es ist sicherlich nicht eine gute Praxis, wählen Sie eine Magische Zahl, um anzuzeigen, Wert fehlen, es sei denn, Sie können sich völlig sicher, dass diese Magische Zahl nicht erscheinen würden als Ergebnis einige Arithmetik (was im Allgemeinen wahr ist). So ist der beste Ansatz hier ist entweder auf eine größere Art als
int
(z.B.Number
), oder einige flag (Boolean
Wert) Funktion, sowieint
, um anzuzeigen tatsächlichen Wert fehlen. Die Wahl sollte davon abhängen, ob Sie möchten, unterstreichen die Bedeutung der Tatsache, dass der übergebene Wert ist ein integraler Bestandteil.Ich denke, Ihr Kommentar bietet eine weitaus bessere "best practice" - Lösung als die original-Antwort. Ich bin damit einverstanden, dass die magischen zahlen sind selten eine gute Idee (das war, nachdem alle, ist der Punkt, der mein ursprüngliches posting). Funktion setMyValue(useSuppliedValue:Boolean = false, suppliedValue:int = 0), während wordier, scheint so, dass ein eindeutiger format für die Methode; das scheint mir eine Recht solide Antwort. Wenn Sie möchten, Bearbeiten Sie Ihre Antwort und schreiben Sie es als solche, ich werde gerne prüfen, "Antwort" und den Kredit, den Sie mit der rep-Punkte. :c) Vielen Dank!
(re: meine bisherigen. Ich meine nicht zu schüchtern oder cagey über die überprüfung der "Antwort" - button. Ich bin sehr neu auf stack overflow und nicht wissen, die Etikette für diese Dinge. Mir scheint, dass die Antwort sollte richtig Lesen bevor ich es meinen Daumen nach oben. Ist das richtig?)
Vielen Dank für die Beratung zum aktualisieren der Antwort. Tat so.
InformationsquelleAutor dragonfly
Ist der generierte Wert einer const? Wenn es so ist, warum nicht einfach diese als default-Wert?
Ja, denn dies ist die Standard-Initialisierung wird der Wert für
int
(fürstring
undObject
dies würdenull
).Die andere Möglichkeit ist die lose geben Sie die parameter als
Object
oder halten Sie es nicht spezifiziert (durch die Verwendung einer*
) und später auf typecast es zuint
wenn es nichtnull
.BTW, ich liebte Sie, in "Langen, Dunklen Tee-Zeit..." ;c)
InformationsquelleAutor dirkgently
Meine Lösung war einfach die Benutzung dieser
InformationsquelleAutor Shaun Doudican
InformationsquelleAutor cleverbit