2016-07-20 28 views
0

Ich habe ein Lua-Projekt mit Lua-Dateien in mehreren Verzeichnissen alle unter dem gleichen Stammordner mit einigen Abhängigkeiten angegeben.Abhängigkeiten für Lua generieren?

Gelegentlich laufe ich in Fragen, bei denen, wenn eine Tabelle zur Ladezeit ich eine Null-Ausnahme geladen wird, wie die Tabelle eine noch nicht initialisiert Tabelle verweist, wie:

Customer = 
{ 
    Type = CustomerTypes.Friendly 
} 

, die eine Null Ausnahme verursacht für CustomerTypes als CustomerTypes.Lua wurde noch nicht geladen.

Meine aktuelle Lösung besteht darin, einfach einen globalen Funktionsaufruf in diesen LUA-Dateien zu haben, um die Abhängigkeitsskripte zu laden.

Was ich tun möchte, ist meine Lua-Dateien vorprozessieren, um alle Abhängigkeiten zu finden und zur Laufzeit laden sie in dieser Reihenfolge ohne Funktionsaufrufe oder spezielle Syntax in meinen lua-Dateien, um dies zu bestimmen (dh der Pre-Prozessor wird prozesstechnisch Abhängigkeiten ausarbeiten).

Ist das etwas, das realistisch erreicht werden kann? Gibt es andere Lösungen da draußen? (Ich bin auf einige gestoßen, bin mir aber nicht sicher, ob sie es wert sind, verfolgt zu werden).

+1

Alternativ können Sie die Abhängigkeiten so entwerfen, dass sie mit [require] (https://www.lua.org/manual/5.3/manual.html#pdf-require) kompatibel sind und jede Abhängigkeit von jedem "deklarieren" Datei in der Datei selbst mit 'require' Aufrufen (typischerweise in Form von' local CustomerTypes = require ("CustomerTypes") 'zusammen am Anfang einer Datei). –

Antwort

2

Wie bei lua gibt es etwa 230891239122 Möglichkeiten, dies zu lösen. Ich werde 3 von der Spitze meines Kopfes nennen, aber ich wette, ich könnte mindestens 101 von ihnen illustrieren und ein Couchtischbuch veröffentlichen.

Zunächst muss gesagt werden, dass der Begriff "Abhängigkeiten" hier ausschließlich Ihrer Anwendung entspricht. Lua hat keine Ahnung davon. Das ist also nichts wie die Überwindung eines Mangels in Lua, es ist einfach eine Skripting-Umgebung in Ihrer Anwendung zu erstellen, die Sie komfortabel macht, und darum geht es bei Lua.

Nun scheint es mir, Sie sind zu einer Schlussfolgerung gesprungen, dass Vorverarbeitung erforderlich ist, um das gegebene Problem zu lösen. Ich glaube nicht, dass dies gerechtfertigt ist. Ich fühle mich etwas bequemer, wenn ich sage, dass ein konventionellerer Ansatz zur Lösung des Problems darin besteht, eine globale Metamethode global zu erstellen, die die Situation "CustomerTypes existiert noch nicht" behandelt, indem eine Liste von Scripts referenziert wird, die ursprünglich aus dem Dateisystem für eins mit der Bezeichnung CustomerTypes.lua gescannt wurden und das laufen lassen.

Aber vielleicht haben Sie einen guten Grund dafür, dass es streng als Vorverarbeitung getan werden soll. In Ihrem Fall würde ich anfangen, indem ich 'Abhängigkeiten' als irgendeinen Namen betrachten würde, der ein Skript ist, das in Ihrem Skript-Dateisystem gefunden wird. Dann scannen Sie jedes Skript, um nach den Namen der Abhängigkeiten zu suchen, indem Sie die soeben erstellten Definitionen/Listen verwenden, und jedem dieser Skripte einen load(dependency)-Befehl voranstellen.

Da das Konzept von "Runtime" oder "Preprocessing" in diesem Kontext etwas mehrdeutig ist, meinen Sie vielleicht Skriptkompilierungszeit. Sie könnten das LuaMacros-Token-Filtersystem verwenden, um ein Makro zu erstellen, das CustomerTypes durch require("CustomerTypes.lua") oder etwas Ähnliches ersetzt, nachdem Sie herausgefunden haben, dass CustomerTypes ein rechtlicher Abhängigkeitsname ist.