我正在使用Lua编程的第一步,并在运行脚本时遇到此错误:
attempt to index upvalue 'base' (a function value)
这可能是由于我尚未掌握的非常基本的东西,但在谷歌搜索时我找不到任何有关它的好信息。有人可以向我解释这是什么意思吗?
答案 0 :(得分:13)
在这种情况下,它看起来base
是一个函数,但您尝试将其编入索引(例如。base[5]
或base.somefield
)。
'upvalue'部分只是告诉你变量base
是什么类型,在这种情况下是一个upvalue(也就是外部局部变量)。
答案 1 :(得分:5)
正如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
中初始化foo
时,移除f()
前面的foo = {}
foo.bar = "Hi!"
会修复示例,即
{
"colors": [
{
"name": "Red",
"thumb": "/imgs/redthumb.png",
"largeimg": "/imgs/redlarge.png"
},
{
"name": "Blue",
"thumb": "/imgs/bluethumb.png",
"largeimg": "/imgs/bluelarge.png"
}
]
}
现在调用useFoo()将产生所需的输出
嗨!