nehme ich einen Dateinamen „test.lua“ haben unten enthält Zeilen:Wie bekommt man die Schließung in lua?
--[[ test.lua --]]
local f = function()
print"local function f in test.lua"
end
f_generate = function()
local fun = loadstring(" f()")
-- local env = getfenv(1)
-- set(fun,env)
return fun
end
f_generate()()
--[[ end of test.lua--]]
weil loadString- seine Sachen unter der globalen Umwelt zu tun, so, wenn ich f_generate nennen()() i wird eine Fehlermeldung angezeigt "Versuch, global 'f' (ein Nullwert) aufzurufen"
Der Code auskommentiert zeigt, dass die Funktionsumgebung mit diesem Problem nicht umgehen kann.
Ursache Tabelle ist die einzige Datenstruktur in lua, (und Funktionsumgebung und andere Mengen von Dingen sind durch Tabelle implementieren), ich denke, ist vernünftig anzunehmen, dass die Schließung auch durch Tabelle implementieren, aber wie kann ich es bekommen ?
lokal __cmp__table = { [ ">"] = Funktion (a, b) liefert ein> b Ende, [ "> ="] = Funktion (a, b) liefern ein> = b Ende, [ "<"] = Funktion (a, b) liefern eine gray
das ist der echte code, es scheint, dass ich wirklich loadstring brauchen, jede suggustion? und beiseite legen alle praktischen Notwendigkeit und Workaround, können wir immer noch über die Fähigkeit, die Schließung zu bekommen, schließlich ist die Schließung die aktive Datensatzkette der Funktion (korrigieren Sie mich, wenn ...), und ich denke, lua implementieren es als Tabelle (denn alles Ding kann als Tabelle implementieren ...; wieder, korrigieren Sie mich, wenn ...) vielen Dank, es hilft wirklich. – gray
@gray: Nein, Closures und lokale variable Frames sind keine Tabellen. – Javier