<< Click to Display Table of Contents >> Navigation: Multi-Protocol MasterOPC Server > Руководство по языку Lua 5.1 > Язык и синтаксис > Области видимости > Области видимости |
Lua язык с лексическим разграничением областей видимости. Область видимости переменной начинается первым выражением пocлe ее объявления и действует до конца блока, в котором это объявление встречается. Рассмотрим следующий пример:
x = 10 -- глобальная переменная
do -- блок
local x = x -- локальная переменная 'x' со значением 10
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 локальная переменная объявляется еще не в области своей видимости, поэтому присваивается именно внешняя переменная.
В соответствии с правилами лексического разграничения областей видимости, локальные переменные доступны в функциях, определенных внутри их области видимости. Локальная переменная, используемая в таких функциях, называется внeшнeй лokaльнoй пepeмeннoй (пo oтнoшeнию k oпpeдeлeннoй внутри ее области видимости функции).
Обработка каждого объявления 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.