kioki Posted April 24, 2011 Share Posted April 24, 2011 Привет всем!В общем когда я поиграл в MTA меня зацепило и мне захотелось сделать что то своё.Я начал читать разные обучалки по LUA языку и вроде бы мне всё понятно но есть одно но,какие бы учебники я не читал,мне неясно одно,чем отличаются локальные переменные от глобальных?Объясните пожалуйста нормальным языком Link to comment
Antibird Posted April 24, 2011 Share Posted April 24, 2011 Несколько моментов применительно к 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
kioki Posted April 25, 2011 Author Share Posted April 25, 2011 Antibird,спасибо!Теперь всё понятно Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now