我把我的第一個步驟,在Lua編程和得到這個錯誤的含義是:什麼是運行我的腳本的「企圖指數的upvalue」
attempt to index upvalue 'base' (a function value)
這可能是由於一些非常基本的,我的天堂還沒有掌握,但是當用谷歌搜索時我找不到任何有關它的好消息。有人可以向我解釋它的含義嗎?
我把我的第一個步驟,在Lua編程和得到這個錯誤的含義是:什麼是運行我的腳本的「企圖指數的upvalue」
attempt to index upvalue 'base' (a function value)
這可能是由於一些非常基本的,我的天堂還沒有掌握,但是當用谷歌搜索時我找不到任何有關它的好消息。有人可以向我解釋它的含義嗎?
在這種情況下,看起來base
是一個函數,但您試圖將它索引爲一個表格(例如,base[5]
或base.somefield
)。
「upvalue」部分只是告訴你什麼樣的變量base
是在這種情況下是一個upvalue(又稱外部局部變量)。
啊,當然是的 - 它就這麼簡單。在我的困惑中,我錯過了明顯的。非常感謝你的幫助! – Cactuar 2008-10-12 15:34:53
正如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()
在這種情況下,去除的foo
前面local
當它在f()
修復的例子被初始化,即
foo = {}
foo.bar = "Hi!"
現在電話使用Foo()將產生所需的輸出
嗨!
下面是幾個關於術語upvalue的參考。本頁面通過一個使用匿名函數http://www.lua.org/pil/6.1.html的例子描述了這個概念,本文抱怨術語upvalue暗示了一種替代方案http://lua-users.org/lists/ lua-l/2005-11/msg00243.html – 2012-12-16 22:31:30