2017-07-03 5 views
0

Ist es möglich, die Lua-Tabelle inklusive Funktionsargumente zu dumpen? Wenn ja, wie kann ich es tun?Dumping lua func mit Argumenten

Ich habe es geschafft, Tabellen zu leeren und mit Adressen zu funktionieren, aber ich war nicht in der Lage, einen Weg zu finden, Funktion Args zu bekommen, ich habe verschiedene Methoden ausprobiert, aber kein Glück.

Also ich möchte sie Wahrheit Dumping Tabellen und Funktion plus Args der Funktion erhalten. Ausgabe sollte in etwa so sein: Funktion JumpHigh (Player, Höhe)

Ich weiß nicht, ob es überhaupt möglich ist, aber wäre sehr praktisch.

+1

Welches Problem versuchen Sie wirklich zu lösen? – lhf

+0

Es wäre viel klarer, Code zu verwenden, um sich zu erklären. –

Antwort

1

Tabelle speichert nur Werte.

Wenn eine Funktion in einer Tabelle gespeichert ist, dann ist es nur ein Funktionskörper, es gibt keine Argumente. Wenn Argumente angewendet würden, würde die Tabelle nur das Endergebnis dieses Aufrufs speichern.

Vielleicht sprechen Sie über Closure - Funktion zurückgegeben von anderen Funktionen, einige Argumente von einer Top-Level-Funktion in einem lexikalischen Abschluss erfassen? Dann siehe debug.getupvalue() Funktion, um den Inhalt des Abschlusses zu prüfen.

Ist das etwas, was Sie fragen?

local function do_some_action(x,y) 
    return function() 
     print(x,y) 
    end 
end 

local t = { 
    func = do_some_action(123,478) 
} 

-- only function value printed 
print "Table content:" 
for k,v in pairs(t) do 
    print(k,v) 
end 

-- list function's upvalues, where captured arguments may be stored 
print "Function's upvalues" 
local i = 0 
repeat 
    i = i + 1 
    local name, val = debug.getupvalue(t.func, i) 
    if name then 
     print(name, val) 
    end 
until not name 

Beachten Sie, dass gespeicherte upvalues ​​ist nicht notwendig, ein Argument für eine Top-Level-Funktion. Es könnte eine lokale Variable sein, die einen vorberechneten Wert für die innere Funktion speichert.

Beachten Sie auch, dass, wenn Skript in Lua Bytecode vorkompiliert wurde mit dem Entfernen von Debug-Informationen, dann werden Sie upvalues ​​Namen nicht erhalten, diese werden leer sein.