2009-08-12 6 views
3

Ich mag diese (Importfunktionen von util-Tabelle als lokale Werte) erreichen:Importfunktionen aus der Tabelle als lokale Funktionen in Lua

function blah() 
local x = util.x 
local y = util.y 
... 
end 

ohne jede Funktion explizit zu verweisen, z.B. so etwas wie:

function blah() 
    for name,f in util do 
    ??? 
    end 
end 

Leider gibt es keine lokale Tabelle, dass ich die Art und Weise festgelegt könnte man _G [ ‚function_name_as_string‘] einstellen. Ideen?

+0

Übrigens, was genau möchten Sie erreichen, indem Sie sie als lokale Variablen setzen? –

+0

Lokale Variablen sind (normalerweise) wesentlich schneller als globale Variablen. Es wird oft als guter Stil angesehen, häufig verwendete globale Variablen (insbesondere Funktionen, deren Werte tatsächlich konstant sind, sobald sie erstellt wurden) in lokalen Speichern zu cachen, um die Leistung zu verbessern. – RBerteig

Antwort

3

Soweit ich weiß, können Sie lokale Variablen nicht nach Namen festlegen. Du müsstest es explizit tun.

Fyi, der Grund dafür ist keine _L Tabelle ähnlich wie _G ist wegen der lexikalischen Scoping. Es ist möglich, dieselben lokalen Variablennamen in mehreren Gültigkeitsbereichen zu verwenden, sie sind jedoch nicht dieselben Variablen. Du müsstest eine setlocal("foo", xxx) Art von Sache haben, aber Lua hat das nicht.

+1

Es gibt debug.setlocal, aber die Debug-Bibliothek ist nicht für normale Programmierung gedacht. – lhf

2

IIRC, Ich habe ein Beispiel für metalua gesehen, das so etwas ermöglicht. Es arbeitet auf dem abstrakten Syntaxbaum und kann als Ergebnis neue Schlüsselwörter und Syntax in die Sprache einführen.