2015-05-28 2 views
1

Я знаю, что это очень простой вопрос, но я очень сильно смущают local переменных & их объем в Lua, например, если я пишу local x=12, это означает, что переменная x является локальной переменной & это значение 12, но вместо этого, если я напишу local x & в следующей строке x=12, означает ли это то же, что и в предыдущем случае, или x=12 рассматривается как глобальная переменная?Как локальные переменные действуют в lua?

+0

Mind-bender: 'local x = 12 local x = x + 11' Две переменные: вторая имеет значение 23; Первый по-прежнему имеет значение 12, но затем становится недоступным из-за того, что он затенен вторым. –

ответ

3

Вы можете думать о нем, как два совершенно независимых вещей:

  1. local x создает «слот» в локальной области, чтобы удерживать значение , т.е. переменная. Эта переменная называется x. С этой точки вперед, пока вы не выйдете из этой области, любая ссылка на x будет ссылаться на это локальное значение x.

  2. x = 12 ставит значение в переменную x. Если вы ранее создали локальный слот с именем x, он туда и пойдет. Если в области нет локального x, он войдет в глобальную область.

local x = 12 просто сокращение для объединения этих двух вещей, создавая локальную переменную и присвоить ей значение в то же время.

Итак, ваши два сценария фактически эквивалентны.

local x 
x = 12 

И

local x = 12 

Сделайте то же самое.

+0

Thanx много для кристально чистых объяснений !! –

2

Вы используете только ключевое слово local один раз для каждой области, так что второй доступ x в вашем примере будет использовать локальный x. Если после этого вы хотите получить доступ к глобальной x, вы можете использовать __G.x

+0

, так что u означает сказать, что во втором случае 'x = 12' подразумевает, что' local x = 12' right ?? –

+1

@caesargetit Это правильно. –

+0

@caesargetit Это неверно. 'local x = 12' означает новую локальную переменную' x'. 'x = 12' означает присвоение 12 ближайшей предыдущей локальной' x' или, если она не принадлежит, глобальной переменной 'x'. –