In Programmierung in Lua (3. Aufl.) von Roberto Ierusalimschy wird angegeben, dassErklärung über „local foo = foo“ Idiom in Lua
Ein gemeinsames Idiom in Lua
ist
local foo = foo
Dieser Code erstellt eine lokale Variable,
foo
, und initialisiert sie mit dem Wert der globalen Variablenfoo
. (Die lokalefoo
sichtbar wird erst nach seiner Erklärung.) Das Idiom ist nützlich, wenn der Chunk benötigt den ursprünglichen Wert vonfoo
sogar zu erhalten, wenn später eine andere Funktion ändert den Wert des globalenfoo
; es beschleunigt auch den Zugriff auffoo
.
Könnte jemand das genauer erklären und ein einfaches Beispiel geben?
Im Moment kann ich nur an dieses Idiom denken, wenn man lokale Variablen (in einem bestimmten Block) verwaltet, die dieselben Namen wie globale Variablen haben, so dass die globale Variable nach dem Block unverändert bleibt .
Ein Beispiel:
foo = 10
do
local foo = foo
foo = math.log10(foo)
print(foo)
end
print(foo)
ergibt dies:
1
10
Aber das gleiche, ohne das Idiom erreicht werden könnte, überhaupt:
bar = 10
do
local bar = math.log10(bar)
print(bar)
end
print(bar)
, die das gleiche Ergebnis liefert. Meine Erklärung scheint also nicht zu stimmen.
@PierPaolo, Weil die Änderung nur im aktuellen Blog wirksam wird. Wenn Sie 'local setfenv = setfenv' nicht machen, ist der Effekt außerhalb des aktuellen Blocks sichtbar, was in diesem Fall nicht erwünscht ist. –