Bezeichner und Namensräume

Was ist ein Bezeichner?

Bezeichner sind, wie schon erwähnt, bspw. die festgelegten Schlüsselwörter.

Sie sind jedoch auch die Namen von Variablen und Funktionen, die die Speicheradresse des betreffenden Elements enthalten. Ein Bezeichner ist wichtig, da wir ohne einen eindeutigen Namen keine Werte speichern oder Funktionen aufrufen können.

function Machwas()
      local zahl = 0
      zahl = zahl +1
end

In diesem Beispiel haben wir gleich 5 Bezeichner verwendet. Wir sagen das es sich um eine Funktion handelt (function). Anschließend geben wir unserer Funktion einen eindeutigen Namen (Machwas). Innerhalb der Funktion erstellen wir eine lokale Variable (local) und bezeichnen sie (zahl). Dann greifen wir über den Bezeichner unserer Variable auf den Wert an der Adresse, die im Bezeichner gespeichert ist, zu und verändern den Wert. Mit dem letzten Bezeichner (end) sagen wir, dass unsere Funktion beendet ist.

Ein Bezeichner hat auch einen Gültigkeitsbereich, den wir als Namensraum bezeichnen.

Namensräume

Unter einem Namensraum versteht man den Bereich indem eine Variable gültig ist. Eine normale Variable ist nach ihrer Erstellung im Normalfall im gesamten Skript verfügbar.

g_MeineVariable = 2

function Machwas()
      g_MeineVariable = g_MeineVariable -1
end

Auf g_MeineVariable kann in der Funktion Machwas() zugegriffen werden, da sich die Funktion innerhalb des Namensraum der Variable befindet.

Bei lokalen variablen ist dies anders. Diese Variablen werden mit einem vorangestellten local vor ihrem Bezeichner initialisiert. Das Schlüsselwort local bedeutet, dass der Bezeichner nur innerhalb des Blocks seine Gültigkeit behält. Außerhalb des Blocks ist der Bezeichner nicht vorhanden.

for i=1,5 do
    local v = i
end

a = v

Der in der Schleife verwendete Bezeichner v ist außerhalb der Schleife nicht mehr vorhanden. Deshalb wird auf dem Speicher an der Stelle a kein Wert abgelegt. Die Variable wird nil.

Auch innerhalb von Tables gibt es Namensräume.

MeinTable = {
      a = MeinTable.b,
      b = 0,
}

Dieses Konstrukt ist nicht funktionsfähig. MeinTable.a wird nil, da MeinTable.b zum Zeitpunkt der Initialisierung noch nicht existiert.

MeinTable = {}
MeinTable.b = 0
MeinTable.a = MeinTable.b

Beachtet man wie in diesem Beispiel die Initialisierungsreihenfolge, dann wird der Wert von MeinTable.b korrekt in MeinTable.a abgelegt.


Schlüsselwörter Operatoren

Zurück zu Grundlagen

Sofern nicht anders angegeben, steht der Inhalt dieser Seite unter Lizenz Creative Commons Attribution-ShareAlike 3.0 License