Lua: Wie man Circular Requires vermeidet

8

Problem

Wie kann ich den folgenden Fehler von Lua 5.1 vermeiden, wenn ich versuche, eine zirkuläre Anforderung zu stellen?

%Vor%

Dateistruktur

main.lua

%Vor%

foo.lua

%Vor%

bar.lua

%Vor%

Erwartete Ausgabe

%Vor%     
Jess Telford 20.12.2012, 03:16
quelle

2 Antworten

10

Eine andere Möglichkeit zur Lösung dieses Problems bestünde darin, die Struktur des Codes zu ändern und die "gegenseitige" Funktionalität in ein drittes Modul zu extrahieren, was sowohl Foo als auch Bar erfordern würde.

    
Michal Kottman 20.12.2012 10:18
quelle
8

Lösung

main.lua

%Vor%

foo.lua

%Vor%

bar.lua

%Vor%

Erklärung

Da Sie globale Variablen festlegen, können Sie prüfen, ob die Datei bereits benötigt wurde (aka; die globale bereits definiert), bevor Sie eine andere erfordern:

%Vor%

Ihr bar.lua müsste dann die Definition von Bar zurückgeben;

%Vor%

Dies wird das Problem nicht vollständig lösen, da bar.lua erwartet, dass Foo definiert wird. Um dies zu beheben, können Sie eine Dummy-Variable mit demselben Namen definieren:

%Vor%

Dies ist nur möglich, weil Sie die Verwendung von Foo auf den Aufruf der Funktion zurückstellen. Wenn Sie Foo.name im Rahmen von bar.lua aufrufen möchten, würden Sie das gleiche zirkuläre Abhängigkeitsproblem haben.

    
Jess Telford 20.12.2012 03:16
quelle

Tags und Links