2008-10-12 30 views
9

我把我的第一個步驟,在Lua編程和得到這個錯誤的含義是:什麼是運行我的腳本的「企圖指數的upvalue」

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

這可能是由於一些非常基本的,我的天堂還沒有掌握,但是當用谷歌搜索時我找不到任何有關它的好消息。有人可以向我解釋它的含義嗎?

+0

下面是幾個關於術語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

回答

12

在這種情況下,看起來base是一個函數,但您試圖將它索引爲一個表格(例如,base[5]base.somefield)。

「upvalue」部分只是告訴你什麼樣的變量base是在這種情況下是一個upvalue(又稱外部局部變量)。

+0

啊,當然是的 - 它就這麼簡單。在我的困惑中,我錯過了明顯的。非常感謝你的幫助! – Cactuar 2008-10-12 15:34:53

3

一個「本地」太多了?

正如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()將產生所需的輸出

嗨!

相關問題