2011-12-22 11 views
5

मैं लूआ में ओओपी कैसे किया जाता है, इस पर एक संभाल पाने की कोशिश कर रहा हूं, और मैंने सोचा कि मेरे पास ऐसा करने का एक आसान तरीका है लेकिन यह काम नहीं कर रहा है और मैं बस कारण नहीं देख रहा है। मैं, कोरोना एसडीके के साथ काम कर रहा हूँ, हालांकि मुझे लगता है कि कोई फर्क नहीं करता है (सिवाय इसके कि जहां प्रिंट() आता है से मेरा मानना ​​है कि है) संभालने हूँतालिका में कार्य करने के लिए पारित लू तर्क शून्य

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

FYI करें,: यहाँ मैं क्या कोशिश कर रहा हूँ है। किसी भी मामले में, जो भाग मुझे मार रहा है वह यह है कि प्रिंट नाम (इननाम) द्वारा रिपोर्ट किए गए नाम में शून्य है ... इसलिए, मेरा नाम स्पष्ट रूप से शून्य पर सेट है इसलिए कहने के लिए कॉल हैलो() विफल हो जाता है (हालांकि वे ठीक काम करते हैं यदि मैं एक मूल्य को हार्डकोड करता हूं myName, जो मुझे लगता है कि मैं जिस मूल संरचना की कोशिश कर रहा हूं वह सोचने के लिए ध्वनि है, लेकिन मुझे कुछ आसान याद आना होगा)। ऐसा लगता है, जहां तक ​​मैं कह सकता हूं, जैसे न्यूपर्सन() को कॉल किया जाता है, जैसे नाम के मूल्य को सेट नहीं किया जा रहा है, लेकिन मैं अपने जीवन के लिए क्यों नहीं समझ सकता हूं; मुझे नहीं लगता कि यह किसी अन्य फ़ंक्शन कॉल की तरह क्यों नहीं है।

किसी भी मदद की सराहना की जाएगी। धन्यवाद!

function Person:newPerson(inName) 

इस के बराबर है:

उत्तर

7

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

मेरी इच्छा है कि मैं आपके और निकोल के दोनों उत्तरों को सही के रूप में स्वीकार कर सकूं, आप दोनों इसे ठीक से प्राप्त कर चुके हैं ... मैं इसे आपको इसलिए दे रहा हूं क्योंकि आपने पहले जवाब दिया था :) लेकिन निकोल को धन्यवाद देने के लिए धन्यवाद ... जैसा कि मैंने उम्मीद की थी, कुछ मूर्खतापूर्ण था कि मैं सिर्फ फ्लैट-आउट भूल गया था, यहां तक ​​कि कुछ भी मुझे नहीं पता था। धन्यवाद, सबकुछ काम कर रहा है और मुझे अब कैसे चाहिए :) –

+4

@ Schollii: stackoverflow फोरम में अपने उत्तरों को समझाने का प्रयास करें। – karthik

+0

@ कार्तिक: आप सही हैं, अनुस्मारक के लिए धन्यवाद! – Schollii

9

याद रखें कि यह प्रयास करें

function Person.newPerson(self, inName) 

इसलिए, जब आप ऐसा करते हैं:

Person.newPerson("Frank"); 

आप एक ऐसे फ़ंक्शन पर एक पैरामीटर पास कर रहे हैं जो दो से अपेक्षा करता है। शायद आप : के साथ बनाए जाने के लिए newPerson नहीं चाहते हैं।

संबंधित मुद्दे