Wie eine variable zu deklarieren, ohne initting es zu null in Lua?
Ich fand es sehr nützlich, etwas zu tun:
if not variable then
variable = value
end
Natürlich würde ich in der Regel vielmehr, dass die variable local, aber ich kann es nicht erklären, es in meinem lokalen wenn, oder es wird nicht zugänglich sein.
Also manchmal weiß ich:
local variable
if not variable then
variable = value
end
Das problem ist, dass ich beim Durchlaufen dieses Codes, der Variablen-Deklaration setzt die variable gleich null. Wenn ich Leben kann mit einem globalen Wert (ich kann), ich kann es umgehen, indem Sie einfach nicht deklarieren Sie die variable außerhalb des if-Blocks.
Aber gibt es nicht ein Möglichkeit, dass ich sowohl meine lokale Wertschöpfung und lassen Sie es seinen Wert behält?
- Es ist nicht klar, was Sie hier zu tun versuchen. Wenn Sie erstellen eine neue lokale variable, dann ist es per definition den Wert null. Also, was Variablen genau sind Sie versuchen, überprüfen Sie den Wert? Wollen Sie deklarieren Sie eine neue variable oder nicht?
- Ist es eine rekursive Funktion aufrufen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, ist die Art und Weise
or
definiert ist, in Lua gibt Ihnen eine schöne idiom zu vermeiden, dieif
insgesamt:Wenn variable
nil
,or
bewerten zu seiner zweiten Operanden. Natürlich wird dies nur funktionieren, wennfalse
ist kein Gültiger Wert fürvariable
(weilfalse
undnil
sind beide "falsch" so weit wieor
betroffen ist).Haben Sie jedoch das problem, dass Sie brauchen, um die variable zu deklarieren irgendwo. Ich vermute, dass Ihr problem ist, dass im Falle einer globalen Schleife, die Sie denken, Sie haben zu tun, entweder:
(die
variable
global) oderist sinnlos, weil
local
schränkt den Umfang einer iteration, und neu initialisiertvariable
als `nil.Was Sie kann allerdings tun, ist erstellen Sie einen anderen block, begrenzt den Umfang der
local
Variablen, aber tut nichts anderes:Gibt es eine einfache Möglichkeit zu testen, den Umfang der einheimischen in Schleifen:
Wenn man dieses erhalten Sie:
Wenn die lokale eine innerhalb der Schleife überlebte, um die nächste iteration dann nach dem ersten drucken sollte es haben nur gedruckt, "DAS IST INTERN", wie die interne eine würde Schatten der externen eine. Die beiden Saiten abwechselnd bedeutet, dass die interne lokale eine nie überlebt der Unterseite der Schleife.
Natürlich, auch wenn es Sie überleben würde, habe das problem, das interne lokale Deklaration shadowing der vorherigen iteration die lokalen eine jedes mal durch die Schleife. Im wesentlichen würden Sie nicht auf die Vorherige iteration der version von eine und durch die Dritte iteration würden Sie haben 3 separate interne einheimischen, nur von denen die Letzte zugänglich wären. Es wäre das gleiche, als wenn Sie dies getan hatte: