14.1 Fehlerbehebung

Dieser Abschnitt umfasst einige häufig auftretende Probleme und ihre Lösungen.

  1. Tabellen initialisieren: Versuchen Sie nicht eine Tabelle mit einer nie gebrauchten Variable zu initialisieren, denn diese ist Nil. Wenn Sie es trotzdem tun, wird das Tabellenfeld nicht angelegt werden. Zum Beispiel funktioniert folgender Code nicht:

     
    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
    

  2. überprüfen, ob eine Variable Nil ist: Seien Sie vorsichtig, wenn Sie eine Variable kontrollieren, ob sie Nil ist. GetType() ist die einzige zuverlässige Möglichkeit, um das herauszufinden. Eine direkte Überprüfung mit Nil ist keine gute Idee, denn das kann auch True liefern, wenn die Variable Null ist. Beispiel:

     
    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.

  3. Falsche Initialisierung von Variablen: Mehrere Variablen in Hollywood zu initialisieren ist ein bisschen anders als in den meisten anderen Sprachen, weil Hollywood nur ein einziges Gleichheitszeichen erwartet. Zum Beispiel könnte dieser Code richtig aussehen, ist aber falsch:

     
    ; 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.

  4. Werte zurückgeben: Seien Sie vorsichtig mit Funktionen, die etwas zurückgeben. Der Rückgabewert muss in Klammern eingeschlossen werden. Code wie der folgende ist falsch und löst keinen Fehler aus:

     
    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
    


Navigation zeigen