Dieser Abschnitt umfasst einige häufig auftretende Probleme und ihre Lösungen.
t = {} ; Erstellt eine Tabelle t.x = y ; weist 'y' dem Feld x zu; Beachte y ist Nil DebugPrint(t.x) ; ---> Fehler! Feld 'x' ist nicht initialisiert! |
Die Lösung ist, y zuerst zu initialisieren:
t = {} ; Erstellt eine Tabelle y = 0 ; setzt y auf 0 t.x = y ; weist 'y' dem Feld x zu DebugPrint(t.x) ; Funktioniert! Gibt '0' aus |
a = 0 b = Nil DebugPrint(GetType(a) = #NIL, a = Nil) ; Gibt "0 1" aus DebugPrint(GetType(b) = #NIL, b = Nil) ; Gibt "1 1" aus |
Sie sehen, dass "a = Nil" True liefert, obwohl eine Null
in a
abgelegt ist. Das ist, weil Nil immer als Null
angesehen wird, wenn es in Ausdrücken verwendet wird. Darum benutzen
Sie GetType() um herauszufinden, ob eine Variable wirklich
Nil ist. Ab Hollywood 6.0 können Sie auch den dedizierten
Befehl IsNil() verwenden, um eine Variable gegen Nil
zu
überprüfen. Siehe IsNil für Details.
; schlechter Code! Local a = 5, b = 6, c = 7 |
Leider würde dieser schlechte Code nicht einmal einen Fehler
auslösen, aber er würde falsch interpretiert werden. Hollywood
würde mit dem obigen Code der Variablen a
5 zuweisen und den
Rest einfach ignorieren, weil es nur eine Variable auf der
linken Seite des Gleichheitszeichen hat. Dementsprechend wäre
die richtige Version der folgende Code:
; guter Code! Local a, b, c = 5, 6, 7 |
Dieser Code würde 5 an a
, 6 an b
und 7 an c
zuweisen.
Function p_Add(a, b) Local r = a + b Return r ; HUCH!!! EndFunction |
Dieser Code würde so interpretiert werden, dass Return
ausgeführt
und dann die Funktion r()
aufgerufen wird. Natürlich wird
die Funktion r()
nicht erreicht werden, aber die oben beschriebene
Funktion wird Nil zurückgeben, d.H. in
jedem Fall nichts. Dieser Code ist die richtige Version:
Function p_Add(a, b) Local r = a + b Return(r) EndFunction |