0Pricing
Lua Academy · Lektion

Was sind Upvalues?

Verstehen Sie, wie Closures Variablen aus umgebenden Gültigkeitsbereichen als Upvalues erfassen

Was sind Upvalues? ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Zusammenfassung: Closures

Eine Closure ist eine Funktion, die zusammen mit Referenzen auf Variablen aus ihrem einschließenden Gültigkeitsbereich gebündelt ist. Diese erfassten Variablen werden Upvalues genannt.

Beispiel für eine Upvalue

Die innere Funktion erfasst count aus dem Gültigkeitsbereich der äußeren Funktion.

local function makeCounter()
  local count = 0
  return function()
    count = count + 1
    return count
  end
end
local next = makeCounter()
print(next())  -- 1
print(next())  -- 2

Upvalues sind veränderliche Variablen

Upvalues sind keine Kopien, sondern Referenzen auf die Variable. Die Closure kann sie sowohl lesen als auch schreiben.

Mehrere Upvalues

Eine Closure kann mehrere Variablen aus mehreren umgebenden Scopes erfassen.

local function adder(x)
  return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3))  -- 8

Lebensdauer von Upvalues

Upvalues bleiben so lange bestehen, wie mindestens eine Closure, die auf sie verweist, aktiv ist. Sie werden erst vom Garbage Collector freigegeben, wenn alle darauf verweisenden Closures freigegeben wurden.

debug.getupvalue

Mit debug.getupvalue(fn, n) können Sie Upvalues untersuchen. Die Funktion gibt den Namen und den Wert des n-ten Upvalues zurück.

local x = 10
local function f() return x end
print(debug.getupvalue(f, 1))  -- x  10

Upvalue vs. globale Variable

Upvalues (von Closures erfasste lokale Variablen) sind schneller als globale Variablen. Die VM greift über einen Index direkt auf sie zu, ohne eine Tabellensuche.

Geschlossenes Upvalue

Wenn der umgebende Block beendet wird, wird das Upvalue geschlossen: Es wird vom Stack in den Heap verschoben. Die Closure verwendet weiterhin dieselbe Heap-Zelle.

Offene und geschlossene Upvalues

Offen: Das Upvalue befindet sich noch auf dem Stack (die umgebende Funktion läuft noch). Geschlossen: Das Upvalue wurde nach dem Ende des umgebenden Scopes in den Heap verschoben.

Praktischer Anwendungsfall

Upvalues eignen sich in Closures ganz natürlich für privaten Zustand: Eine Modulfunktion kann privaten Zustand verwalten, ohne ihn global bereitzustellen.

local id = 0
local function newId()
  id = id + 1
  return id
end

Maximale Anzahl von Upvalues

Jede Lua-Funktion kann auf bis zu 255 Upvalues verweisen. In der Praxis ist das nur selten relevant.

Frage zu Upvalues

Was ist ein Upvalue?

Zusammenfassung: Upvalues

Upvalues sind die von einer Closure erfassten äußeren Variablen. Sie bleiben nach dem Ende des umgebenden Scopes im Heap erhalten, werden per Referenz gemeinsam verwendet und ermöglichen privaten veränderlichen Zustand ohne globale Variablen.

Häufig gestellte Fragen

Ist die Lektion „Was sind Upvalues?“ kostenlos?

Ja — der vollständige Text von „Was sind Upvalues?“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Was sind Upvalues?“?

Verstehen Sie, wie Closures Variablen aus umgebenden Gültigkeitsbereichen als Upvalues erfassen Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Was sind Upvalues?“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Was sind Upvalues?
  2. Gemeinsam genutzte Upvalues zwischen Closures
  3. Factory-Funktionen und Generatoren
  4. Memoisierung mit Closures
← Zurück zu Lua Academy