2011-12-22 57 views
5

我試圖得到如何在Lua中完成OOP的句柄,並且我認爲我有一個簡單的方法來做到這一點,但它不工作,我只是沒有看到原因。這裏就是我想:傳遞給表中的函數的Lua參數爲零

Person = { }; 
function Person:newPerson(inName) 
    print(inName); 
    p = { }; 
    p.myName = inName; 
    function p:sayHello() 
    print ("Hello, my name is " .. self.myName); 
    end 
    return p; 
end 

Frank = Person.newPerson("Frank"); 
Frank:sayHello(); 

通知你,我與電暈SDK的工作,雖然我假設不有所作爲(除非這就是打印()來自我相信)。在任何情況下,殺死我的部分是因爲print(inName)所報告的inName爲零...因此,myName顯然設置爲零,所以調用sayHello()失敗(儘管如果硬編碼值爲myName,這讓我認爲我正在嘗試的基本結構是合理的,但我必須缺少一些簡單的東西)。就我所知,它看起來像是在調用newPerson()時未設置inName的值,但我不能爲我的生活找出原因;我不明白爲什麼它不像其他函數調用一樣。

任何幫助,將不勝感激。謝謝!

回答

7

嘗試

Frank = Person:newPerson("Frank"); 
+0

我希望我能接受你和Nicol的回答是正確的,你們都明白了......我只是因爲你先回答才把它給你:)但是,謝謝你尼科爾解釋它......正如我所預料的那樣,它真的很愚蠢,我忘記了,甚至連我不知道的東西都忘了。再次感謝,一切工作,因爲它應該和我現在想如何:) – 2011-12-22 06:27:15

+4

@ Schollii:嘗試解釋你的答案在stackoverflow論壇。 – karthik 2011-12-22 09:17:26

+0

@karthik:你說得對,謝謝提醒! – Schollii 2011-12-22 13:32:45

9

記住這一點:

function Person:newPerson(inName) 

等效於此:

function Person.newPerson(self, inName) 

因此,當你這樣做:

Person.newPerson("Frank"); 

您正將一個參數傳遞給期望兩個的函數。你可能不想用:創建newPerson

相關問題