2011-09-08 42 views
2

我正在創建應該在TI-Nspire計算器上運行的lua腳本。問題是,在運行我的腳本時,調用button:activate()方法時出現錯誤Attempt to index local 'self' (a nil value)。解析器說錯誤出現在下面代碼的第8行。有問題的代碼如下:嘗試調用類方法時出錯:嘗試索引本地「自我」(無值) - Lua

button = class(view) 

function button:init() 
    self.selected = false 
end 

function button:activate() 
    self.selected = true 
end 

我所說的激活功能是這樣的:

item = button() 
local action = "activate" 
local arguments = {} 
item[action](unpack(arguments)) 

我知道class()功能並不在「股票」 Lua的存在,它在能夠使用的功能TI-Nspire Lua實現。您可以找到它的定義和用法here

+0

問題標題不是信息。 – lhf

+0

對不起,我編輯過標題。這是否更好? – Frog

回答

6

obj:methodname(args)是糖的obj.methodname(obj,args)。因此,如果您想使用語法item[action](unpack(arguments)),則需要使用item[action](item,unpack(arguments))。否則,如果您可以明確使用方法,請嘗試item:activate(unpack(arguments))

+0

感謝您的回答!我不能明確地調用方法,所以我使用item [action](item,unpack(arguments))',但它不能完全解決我的問題...是的,錯誤消息已經消失,但它被調用該方法的行上的新行代替。新的錯誤信息是:'試圖調用字段'?' (一個零值)'。你現在怎麼解決這個問題?謝謝! – Frog

+0

@Frog,該消息表明'action'不是'item'所具有的方法的名稱。也許是拼寫錯誤? – lhf

+0

的確,動作不是方法的名稱,而是方法名稱的字符串。我確定沒有輸入錯誤,因爲我的原始示例(稱爲靜態方法)中調用了正確的函數。你有什麼可能是錯的線索?謝謝! – Frog

相關問題