13

我正在 Lua 中进行第一步编程,并在运行脚本时出现此错误:

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

这可能是由于我还没有掌握一些非常基本的东西,但是在谷歌搜索时我找不到任何关于它的好信息。有人可以向我解释这是什么意思吗?

4

2 回答 2

15

在这种情况下,它看起来base是一个函数,但您正试图像表一样索引它(例如base[5]base.somefield)。

'upvalue' 部分只是告诉你什么类型的变量base,在这种情况下是一个 upvalue(又名外部局部变量)。

于 2008-10-12T15:24:35.887 回答
10

一个“本地”太多了?

正如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()

在这种情况下,删除local前面的foowhen it is initialized inf()修复示例,即

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

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

你好!

于 2017-03-19T18:17:47.770 回答