nil: kein Wert
Manchmal hat eine Variable keinen Wert. Dafür hat Lua einen besonderen Wert, nil, der „nichts“ bedeutet. Eine Variable, die du ohne = und einen Wert erzeugst, enthält nil:
local erdbeeren
print(erdbeeren)
print("Erdbeeren:", erdbeeren)Das gibt Folgendes aus:
nil
Erdbeeren: nilnil ist praktisch für Dinge, die noch nicht bekannt oder nicht da sind. Du kannst es auch selbst in einer Variablen speichern, erdbeeren = nil, wenn die Variable nichts mehr enthalten soll. Aber mit nil kannst du nicht rechnen, und du kannst es nicht mit einem Text verbinden:
local muenzen
print("Münzen: " .. muenzen)Lua meldet:
main.lua:2: attempt to concatenate a nil value (local 'muenzen')Lies die Meldung von hinten. (local 'muenzen') ist die Variable: eine lokale namens muenzen. a nil value ist das, was sie enthielt. Und attempt to concatenate ist das, was Lua damit versucht hat: sie mit einem Text zu verbinden (concatenate heißt verketten). Bei +, - und den anderen Operatoren lautet die Meldung attempt to perform arithmetic on a nil value (local 'muenzen'): ein Versuch zu rechnen.
Die häufigste Quelle für nil ist ein Tippfehler in einem Namen:
local muenzen = 120
print(muenzne)Das gibt Folgendes aus:
nilKein Fehler! Lua hat keine lokale Variable namens muenzne gefunden, also hat es nach einer globalen gesucht. Auch die gibt es nicht, und eine Variable, die es nicht gibt, hat den Wert nil. print gibt ihn aus, ohne sich zu beschweren. Der Fehler kommt erst, wenn das Programm etwas mit dem Wert macht:
local muenzen = 120
print("Münzen: " .. muenzne)Lua meldet:
main.lua:2: attempt to concatenate a nil value (global 'muenzne')Das Wort in Klammern gibt dir einen Hinweis:
local: Der Name stimmt, aber die Variable hat noch keinen Wert. Suche die Zeile, in der sie einen hätte bekommen sollen.global: Alle deine Variablen sind lokal, diese gibt es also wahrscheinlich nicht. Suche nach einem Tippfehler oder einem falschen Großbuchstaben:Muenzenist ein anderer Name alsmuenzen.
So schreibst du es:
Anweisungen
- 1
Führe das Programm aus und lies den Fehler. Die Hühner haben heute 12 Eier gelegt: Korrigiere die Zeile, die
eiererzeugt, sodass das Programm Folgendes ausgibt:Hühner: 4 Eier: 12 - 2
Füge diese Zeile am Ende des Programms ein, samt Tippfehler, und führe das Programm aus:
print("Milch: " .. mlich .. " Liter")Lies den Fehler. Korrigiere dann den Namen, sodass das Programm auch die Milch ausgibt, die die Kuh Bella gegeben hat:
Hühner: 4 Eier: 12 Milch: 6 Liter - 3
Emma weiß noch nicht, wie viele Erdbeeren sie pflücken wird. Erzeuge darunter eine Variable
erdbeerenohne Wert und gib sie nach dem Text"Erdbeeren:"aus, durch ein Komma getrennt. Anders als..funktioniert ein Komma mitnil:Hühner: 4 Eier: 12 Milch: 6 Liter Erdbeeren: nil