2016-10-23 5 views
1

Так скажем, у меня есть файл Lua, и в верхней части, я определяю переменную вне функции, но я называю это местныйЛокальные переменные в глобальной области видимости Lua

local x = 1 

Есть ли разница между тем, локальный x и глобальный x?

+1

Вы не можете определить переменную вне функции, так как скрипт скомпилирован как [тело функции] (https://www.lua.org/manual/5.3/manual.html#3.3 0,2). –

ответ

8

Да, как это местное к chunk, что он создан в.

Lua обрабатывает кусок, как тело анонимной функции с переменным числом аргументов (см §3.4.11). Таким образом, куски могут определять локальные переменные, принимать аргументы и возвращать значения. Более того, такая анонимная функция компилируется, как в области внешней локальной переменной с именем _ENV (см. П. 2.2). Результирующая функция всегда имеет _ENV как единственное значение upvalue, даже если она не использует эту переменную.

Рассмотрим следующий пример:

-- main.lua 
require 'other' 
print(x, y) 

-- other.lua 
local x = 5 
y = 10 

Это будет распечатать nil, 10, так как x был локальным для кусок, в то время как y был назначен в качестве повышать стоимость для зависимости от того, Окружающая средакусок был загружен в

См. Также:

И заметьте, что семантика сред изменяется между lua5.1 и Lua5.2:

Смежные вопросы