Gültigkeitsbereich und Blöcke
Teil des Abschnitts Fundamentals der Lua-Journey von Coddy — Lektion 86 von 90.
In Lua können Sie überall in Ihrem Code mithilfe von do...end-Blöcken neue Gültigkeitsbereiche erstellen. Diese Blöcke ermöglichen es Ihnen, genau zu steuern, wo auf Ihre lokalen Variablen zugegriffen werden kann, was Ihnen eine präzise Kontrolle über den Gültigkeitsbereich von Variablen gibt.
So können Sie einen neuen Gültigkeitsbereich mit einem do...end-Block erstellen:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Das funktioniert
print(innerVar) -- Das funktioniert auch
end
print(outerVar) -- Das funktioniert
print(innerVar) -- Dies würde einen Fehler verursachen!Der mächtige Aspekt des Gültigkeitsbereichs (Scope) ist, dass man lokale Variablen mit demselben Namen in verschiedenen Blöcken haben kann und diese völlig getrennt bleiben:
local name = "Alice"
do
local name = "Bob" -- Eine andere Variable!
print(name) -- Gibt "Bob" aus
end
print(name) -- Gibt "Alice" ausJeder do...end-Block erzeugt seine eigene isolierte Umgebung für lokale Variablen. Variablen, die innerhalb eines Blocks deklariert werden, können nicht in den äußeren Gültigkeitsbereich gelangen, während auf Variablen aus äußeren Gültigkeitsbereichen von innerhalb innerer Blöcke zugegriffen werden kann.
Aufgabe
EinfachErstellen Sie verschachtelte do...end-Blöcke, um zu demonstrieren, wie lokale Variablen mit demselben Namen in verschiedenen Gültigkeitsbereichen (Scopes) vollständig getrennt bleiben.
Erstellen Sie zuerst eine lokale Variable namens playerLevel mit dem Wert 10 im äußeren Scope und geben Sie diese aus.
Erstellen Sie dann einen do...end-Block und darin:
- Deklarieren Sie eine neue lokale Variable, die ebenfalls
playerLevelheißt, mit dem Wert25 - Geben Sie dieses innere
playerLevelaus
Nachdem der innere Block endet, geben Sie das äußere playerLevel erneut aus, um zu zeigen, dass es unverändert geblieben ist.
Dies zeigt, dass lokale Variablen mit identischen Namen in verschiedenen Scopes völlig unabhängig voneinander sind – die innere Variable beeinflusst die äußere nicht.
Spickzettel
Erstellen Sie an beliebigen Stellen in Ihrem Code neue Gültigkeitsbereiche mit do...end-Blöcken, um die Sichtbarkeit von Variablen zu steuern:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Das funktioniert
print(innerVar) -- Das funktioniert auch
end
print(outerVar) -- Das funktioniert
print(innerVar) -- Dies würde einen Fehler verursachen!Lokale Variablen mit demselben Namen in verschiedenen Blöcken bleiben völlig voneinander getrennt:
local name = "Alice"
do
local name = "Bob" -- Eine andere Variable!
print(name) -- Gibt "Bob" aus
end
print(name) -- Gibt "Alice" ausVariablen, die innerhalb eines Blocks deklariert wurden, können nicht in den äußeren Gültigkeitsbereich gelangen, während auf Variablen aus äußeren Gültigkeitsbereichen von inneren Blöcken aus zugegriffen werden kann.
Probier es selbst
-- TODO: Schreibe deinen Code hierDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Fundamentals
4Operatoren 2: Vergleichs- & Logikoperatoren
GleichheitsoperatorenVergleichsoperatorenDer 'and'-OperatorDer 'or'-OperatorDer 'not'-OperatorShort-Circuit EvaluationTruthy- und Falsy-WerteZusammenfassung – Einfache Logik7Grundlagen der bedingten Logik
Die if-then-AnweisungDie if-then-else-AnweisungDie elseif-AnweisungZusammenfassung – Schatzkiste10Tabellen Teil 1: Listen-Stil
Was ist eine Tabelle?Eine Tabelle erstellenZugriff auf Elemente per IndexElemente per Index ändernDer Längenoperator '#'table.insert()table.remove()Zusammenfassung - Gruppenmitglieder verwalten13Projekt: Einfacher Zaubertrank-Laden
Projekt-SetupEinen Trank hinzufügen2Variablen und Datentypen
Was ist eine Variable?ZahlenStringsBooleansDer Wert 'nil'Die type()-FunktionNamenskonventionenZusammenfassung - Charakterprofil5Grundlegende Ausgabe
Literale ausgebenVariablen ausgebenMehrere Werte ausgebenStrings & Variablen kombinierenDie tostring() FunktionEingabeCastWiederholung - StatusberichtWiederholung - Bis 1208Grundlagen der String-Manipulation
string.len()string.upper & string.lowerstring.sub()string.rep()string.find()Wiederholung - Benutzernamen formatieren11Tabellen 2: Dictionary-Stil
Schlüssel-Wert-PaareDictionary-Stil Tabellen erstellenZugriff – KlammerschreibweiseZugriff mit PunktnotationPaare hinzufügen und ändernPaare mit nil entfernenWiederholung – Elementeigenschaften14Gültigkeitsbereich von Variablen
Globale VariablenLokale VariablenWarum lokale Variablen verwenden?Gültigkeitsbereich und BlöckeRückblick – Scope-Rätsel3Operatoren 1 Arithmetik & Verkettung
Arithmetische OperatorenModulo-OperatorPotenzierungsoperatorString-VerkettungOperatorrangfolgeRückblick - Einfache Berechnungen6Projekt: Charakter-Stats Anzeige
WillkommensnachrichtCharakter-Stats deklarieren9Grundlagen der Funktionen
Eine Funktion deklarierenEine Funktion aufrufenFunktionen mit ParameternFunktionen mit mehreren ParameternDie 'return'-AnweisungZusammenfassung - Flächenrechner12Schleifen-Grundlagen
Die while-SchleifeDie repeat-until-SchleifeDie numerische for-Schleifefor-Schleife mit SchrittweiteDie 'break'-AnweisungZusammenfassung - Countdown15Abschluss-Herausforderungen
Wiederholung – SpielerzugWiederholung – Einfache DatenbankWiederholung – Summe gerader Zahlen