Я не буду повторять то, что уже было сказано в ответах Bas Bossink и jA_cOp о ссылочных типах, но:
- поскольку это определение локально, оно не должно иметь func scope
Это неверно.Переменные в Lua лексически ограничены , что означает, что они определены в блоке кода и во всех его вложенных блоках.
Что local
создает новую переменную, ограниченную блоком, в котором находится операторявляется блоком, являющимся либо телом функции, «уровнем отступа», либо файлом.
Это означает, что когда вы делаете ссылку на переменную, Lua будет «сканировать вверх», пока не найдет блоккода, в котором эта переменная объявлена локальной, по умолчанию используется глобальная область, если такого объявления нет.
В этом случае a
и t
объявляются локальными, но объявление находится в глобальной области видимости,поэтому a
и t
являются глобальными;или, самое большее, они являются локальными по отношению к текущему файлу.
Затем они не объявляются local
внутри функций, , но они объявляются как параметры, что имеет тот же эффект.Если бы они не были параметрами функции, любая ссылка внутри тела функции все равно ссылалась бы на переменные снаружи.
На lua-users.org есть Scope Tutorial с некоторыми примерами, которые могут помочь вам больше, чем моя попытка объяснить. Программирование в разделе Lua по теме также является хорошим чтением.