Jest to odpowiedź uzupełniające informacje tła.
identyfikatory Lua są wykorzystywane do zmiennych globalnych, zmiennych lokalnych, parametrów i pól tabeli. Posiadają jakąkolwiek wartość.
funkcji Lua są wartościami. Funkcje Lua są anonimowe, niezależnie od składni użytej do ich zdefiniowania.
function f()
--...
end
to instrukcja Lua kompilująca się do definicji funkcji i przypisania do zmiennej. Jest to alternatywna do
f = function()
--...
end
każdym razem, definicja funkcji jest wykonywany, wytwarza nową wartość funkcji, która jest następnie wykorzystywana w jakiejkolwiek związanej wypowiedzi lub zadania.
Powinno być jasne, że ani sprawozdanie koniecznie tworzy nową zmienną ani wymaga, aby zawsze mieć taką samą wartość, ani nie wymaga, aby zawsze posiadać wartość funkcji. Ponadto utworzona funkcja nie musi zawsze być trzymana tylko przez jedną zmienną. Można go kopiować tak jak każdą inną wartość.
Ponadto, podobnie jak inne wartości, wartości funkcji są zbierane śmieci. Tak więc, jeśli f
ma wartość funkcji i jest przypisana do innej wartości lub wykracza poza zakres (powiedzmy, jeśli nie była zmienną globalną), poprzednia wartość będzie zbiorem śmieci, gdy nic innego się do niego nie odniesie.
Bez jakiegokolwiek innego kontekstu function f() end
, to zakładamy, że f
jest zmienną globalną. Ale niekoniecznie tak jest. Jeśli f
był lokalny lub parametr zakres, to jest f
, który zostanie przypisany.
jest "potrzebne"? – Blauhirn
@Blauhirn, nie ściśle, ale zachowuje definicję "starego" lokalnego dla tego bloku. – lhf