Что означает «попытка проиндексировать повышение стоимости» - PullRequest
10 голосов
/ 12 октября 2008

Я делаю первые шаги в программировании на Lua и получаю эту ошибку при запуске скрипта:

attempt to index upvalue 'base' (a function value)

Вероятно, это из-за чего-то очень базового, что я еще не понял, но я не могу найти никакой хорошей информации об этом, когда гуглю. Может ли кто-нибудь объяснить мне, что это значит?

Ответы [ 2 ]

13 голосов
/ 12 октября 2008

В этом случае выглядит, что base - это функция, но вы пытаетесь проиндексировать ее как таблицу (например, base[5] или base.somefield).

Часть 'upvalue' просто говорит вам, что это за переменная base, в данном случае это upvalue (она же внешняя локальная переменная).

5 голосов
/ 19 марта 2017

Один "местный" слишком много?

Как объяснил Майк 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 () даст желаемый результат

Привет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...