Один "местный" слишком много?
Как объяснил Майк F , "значение вверх" - это внешняя локальная переменная. Эта ошибка часто возникает, когда переменная была объявлена local
в предварительном объявлении, а затем снова объявлена local
при ее инициализации. Это оставляет объявленную вперед переменную со значением nil
. Этот фрагмент кода демонстрирует, что не делать:
local foo -- a forward declaration
local function useFoo()
print( foo.bar ) -- foo is an upvalue and this will produce the error in question
-- not only is foo.bar == nil at this point, but so is foo
end
local function f()
-- one LOCAL too many coming up...
local foo = {} -- this is a **new** foo with function scope
foo.bar = "Hi!"
-- the local foo has been initialized to a table
-- the upvalue (external local variable) foo declared above is not
-- initialized
useFoo()
end
f()
В этом случае удаление local
перед foo
, когда оно инициализируется в f()
, исправляет пример, т.е.
foo = {}
foo.bar = "Hi!"
Теперь вызов метода useFoo () даст желаемый результат
Привет!