'attempt to index upvalue' 的意思是“试图索引上值”。

当运行我的 Lua 脚本时,我正在迈出学习 Lua 编程的第一步,但遇到了以下错误:

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

这可能是因为我尚未掌握某些非常基础的知识,但是我在谷歌搜索时找不到任何有用的信息。有人能向我解释它的含义吗?

原文链接 https://stackoverflow.com/questions/195582

点赞
stackoverflow用户88888888
stackoverflow用户88888888

在这种情况下,看起来 base 是一个函数,但你却试图像表一样对其进行索引(例如 base[5]base.somefield)。

'upvalue' 部分只是告诉你 base 是什么类型的变量,这里是一个上值(也称为外部局部变量)。

2008-10-12 15:24:35
stackoverflow用户3455883
stackoverflow用户3455883

一个“本地变量”太多了吗?

正如Mike F所解释的,一个“upvalue”是一个外部本地变量。当一个变量在前向声明中被声明为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()

在这种情况下,在f()中初始化foo时删除前面的local会修复示例,即

foo = {}
foo.bar = "Hi!"

现在调用useFoo()将产生所需的输出

Hi!

2017-03-19 18:17:47