Реализация замыканий в 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 Я знаю, что Луа не выделяетценности в стеке, но он размещает локальные указатели в стеке на значения в куче, не так ли?

Ответы на вопрос(1)

Ваш ответ на вопрос