2.6 – Области видимости
Lua язык с лексическим разграничением областей видимости. Область видимости переменной
начинается первым выражением после ее
объявления и действует до конца блока, в котором это объявление встречается. Рассмотрим
следующий пример:
x = 10 -- глобальная переменная variable
do -- начало блока
local x = x -- объявление локальной переменной
print(x) --> 10
x = x+1
do -- начало вложенного блока
local x = x+1 -- другая локальная 'x'
print(x) --> 12
end
print(x) --> 11
end
print(x) --> 10 (глобальная переменная)
Отметим, что в объявлении local x = x локальная переменная объявляется еще не
в области своей видимости, поэтому присваивается именно внешняя переменная.
В соответствии с правилами лексического разграничения областей видимости, локальные
переменные доступны в функциях, определенных внутри их области видимости. Локальная
переменная, используемая в таких функциях, называется внешней локальной переменной (по отношению к определенной внутри
ее области видимости функции).
Обработка каждого объявления local ведет к созданию новой
локальной переменной. Рассмотрим следующий пример:
a = {}
local x = 20
for i=1,10 do
local y = 0
a[i] = function () y=y+1; return x+y end
end
Цикл создает 10 экземпляров функции, в которых используются различные переменные
y и один и тот же x.
|