2011-12-22 23 views
5

OOP'un Lua'da nasıl yapıldığına dair bir işlem yapmaya çalışıyorum ve bunu yapmanın basit bir yolu olduğunu düşündüm ama işe yaramadı ve sadece Nedeni görmemek. İşte çalıştığım şey: BilginizeTablodaki işleve iletilen Lua argümanları nil

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(); 

, (Ben inanıyorum yazdırma() devreye giriyor hariç) bir fark yapmaz varsayıyorum rağmen, Corona SDK ile çalışıyorum. Her halükarda, beni öldüren kısım, inName, print (inName) tarafından bildirildiği gibi sıfırdır ... bu nedenle, myName kesinlikle sıfır değerine ayarlanmış demektir, bu yüzden demek için bir değeri hardcode yaparsam iyi çalışırlar. myName, denediğim temel yapıyı düşünmeme neden olan ses, ama basit bir şey eksik olmalıyım. Anlayabildiğim kadarıyla, NewPerson() çağrıldığında inName değeri ayarlanmadığı gibi görünüyor, ama neden yaşamam için nedenini anlayamıyorum; Neden başka herhangi bir işlev çağrısı gibi görmüyorum.

Herhangi bir yardım için teşekkür ederiz. Teşekkürler!

function Person:newPerson(inName) 

bu eşdeğerdir mi:

cevap

7

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

Hem senin hem de Nicol'in cevaplarını doğru olarak kabul edebilseydim, ikiniz de tam olarak doğru anladınız ... İlk olarak cevapladığınız için size veriyorum :) Ama siz de anlattığınız için teşekkürler Nicol ... Beklediğim gibi, sadece düz bir şekilde unuttuğum aptalca bir şey, bilmediğim bir şey bile değildi. Tekrar teşekkürler, her şey gerektiği gibi çalışıyorum ve şimdi nasıl istiyorum :) –

+4

@ Schollii: Yanıtlarınızı stackoverflow forumunda açıklamaya çalışın. – karthik

+0

@karthik: Haklısın, hatırlattığın için teşekkürler! – Schollii

9

bu unutmayın deneyin

nedenle
function Person.newPerson(self, inName) 

, bunu yaparken:

Person.newPerson("Frank"); 

Bir parametreyi, iki beklediğiniz bir işleve geçiriyorsunuz. Muhtemelen newPerson'un : ile oluşturulmasını istemezsiniz.