Области видимости

<< 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.