Реализация замыканий в Lua?
У меня есть вопрос о том, как реализованы замыкания.
Скажи, что это в файле с именемtest.lua
:
local a = 'asdf'
local function b()
return a
end
a = 10
return b
И другой файл делает
a = require 'test'
a()
это напечатает
10
Еслиa
указатель на стек'asdf'
(в куче я полагаю, но это не имеет значения) и закрытиеb
создается так, по-видимому, адрес, который был вa
сохраняется дляb
использовать какa = 10
изменить указатель внутри замыкания, а?
Википедия очень хорошо говорит, что меня смущает:
$12Скажи, что это в файле с именем13$
Я думал, что, возможно,b
на самом деле не сохранить указатель на'asdf'
но смещение стека доa
, так что вы можете изменитьa
и смещение стека приведет вас кa
которая указывает на последнее, что вы установилиa
чтобы, но тогда как это работает, когдаa
(указатель) выталкивается из стека и смещение стека становится недействительным?
1 Я знаю, что Луа не выделяетценности в стеке, но он размещает локальные указатели в стеке на значения в куче, не так ли?