Jump to content

Объясните пожалуйста!


Recommended Posts

Привет всем!В общем когда я поиграл в MTA меня зацепило и мне захотелось сделать что то своё.Я начал читать разные обучалки по LUA языку и вроде бы мне всё понятно но есть одно но,какие бы учебники я не читал,мне неясно одно,чем отличаются локальные переменные от глобальных?Объясните пожалуйста нормальным языком

Link to comment

Несколько моментов применительно к MTA.

В случае, если имеются несколько файлов со скриптами, глобальная переменная, объявленная в одним из них, "видна" (доступна) и во всех остальных. Если в каком-то файле переменная объявлена как локальная, из других файлов, грубо говоря, она не видна, как если бы ее и не объявляли вовсе.

  
файл script1.lua 
x1 = 1 --глобальная переменная. 
local x2 = 2 --локальная. 
  
файл script2.lua 
outputChatBox( x1 ) --> "1" 
outputChatBox( x2) --> "nil" -- нет её! 
  

Но это частный случай. В общем принцип то же, но вместо отдельных файлов выступают области видимости переменных. Вообще есть пример вот тут, вроде бы все четко и лаконично изложено. Но на всякий случай:

  
x = 1 --задали переменную x и присвоили её значение 1 
do --Объявляем блок 
    print( x ) --Чему равна переменная x? Равна 1. Она у нас пока одна, глобальная 
    x = 2 --изменили x, теперь равно 2 
    print( x ) --> 2, логично. 
    local x = 3 --объявили локальную переменную x, она "действует" только внутри блока do ... end 
    print( x ) --> 3, ибо если есть локальная переменная, именно её значение и получим, даже если есть "одноименные" глобальные 
end --Закрываем блок. 
print( x ) --> снова 2, так как локальная переменная x "осталась в блоке" и вне блока "не видна". 
-- А вот глобальная x никуда не делась и в последний раз ей присвоили значение 2, что и получили.  

Вместо блоков могут быть другие конструкции,

  
function() --например, функция. 
   local x = 5 
   for i, v in ipairs( ) do -- или итераторы 
        local y = 6 
        print( x ) --> 5 
    end 
    print( y ) --> "nil", нету никакой y, она только в for .. do .. end существует. 
end 
print(x) --> "nil", теперь и x тоже нет, она "осталась" в теле функции. 
  

В общем суть одна. Переменная, объявленная локальной в теле одной из этих конструкций вне конструкции не существует.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...