Hi,
Ich würde gerne in einer Lua-Datei eine andere einbinden, allerdings nicht so, wie es dofile tut, da nicht die variablen der Datei überschrieben werden sollen. Am Besten gebe ich ein Beispiel:
Die Einzubindende Datei (file.lua):
|
Quellcode
|
1
2
3
4
|
a=10
function test()
print("hi")
end
|
Die aufrufende Datei:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
a=1
dies = import("file.lua")
print(a)--sollte 1 zeigen
print(dies.a)--sollte 10 sein
dies.test()--sollte hi ausgeben
--oder auch
jenes = import("file.lua").test
jenes()--sollte ebenfalls hi ausgeben
|
Also im großen und ganzen möchte ich, das die Variablen und Funktionen der eingebundenen Datei nicht global gespeichert werden, sondern in eine Tabelle geschrieben werden, von der aus man sie dann aufrufen kann, ohne das die alten Variablen überschrieben werden.
Ich habe da auch schon einiges versucht, aber es funktioniert nicht so, wie es soll.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function import(name)
local oldenv = {}
for i,j in pairs(_G) do
oldenv[i]=j;
end--über for-Schleife, weil sonst anscheinend oldenv ein pointer auf _G ist
dofile(name)
local newenv = {}
for i,j in pairs(_G) do
newenv[i]=j;
end--selber Grund
_G={}--wenn _G nicht erst ganz gelöscht wird funktioniert es irgendwie nicht
_G=oldenv
return newenv--sollte alle Variablen und Funktionen der importierten Datei enthalten (Plus die der importierenden, das ist aber egal)
end
|
Das ganze Funktioniert soweit, aber mein Ziel ist nicht erreicht.
Zwar sind die Variablen, die importiert wurden nicht in _G, aber sie sind trotzdem aufrufbar (weswegen ist mir schleierhaft) und überschreiben ihre Vorgänger.
Auch der Returnwert ist richtig und ich kann die Funktionen/Variablen auch über diesen ansprechen, das einzige Problem ist, das sie ja nicht die schon vorhandenen Variablen überschreiben sollen.
Schonmal vielen Dank für eure Hilfe, ich hoffe das Problem ist lösbar.