2015-10-09 15 views
5

यह ठीक करने के लिए बहुत आसान है; बस इसे return nil बनाएं, लेकिन क्यों मेरा कोड उस लाइन के बिना काम नहीं करता है?मेरा कोड केवल एक बार प्रिंट क्यों करता है?

function x(bool) 
    if bool then 
     return "!" 
    end 
end 

print(x(true), x(false), x(false)) 

क्या यह और भी भ्रामक है, करता है कि हमेशा nil प्रिंट, कई बार के रूप के रूप में मैं x(false) घटाना कहते हैं 1.

मैं अपने आगे क्यों चारों ओर यह हो रहा है लपेट नहीं कर पा रहे।

+2

फ़ंक्शन कॉल द्वारा लौटाए गए मानों की संख्या COMMA को एक से समायोजित करने से पहले, अंतिम कॉल के मानों की संख्या समायोजित नहीं की जाती है। तो, आपके पास '1 + 1 + 0' मान मुद्रित हैं –

उत्तर

6

The manual का कहना है:

नियंत्रण एक return बयान का सामना किए बिना एक समारोह के अंत तक पहुँच जाता है, तो समारोह बिना किसी परिणाम के देता है।

ध्यान दें कि कोई परिणाम नहीं लौटा nil लौटने से अलग है।


इस कॉल में:

print(x(true), x(false), x(false)) 

दोनों x(false) रिटर्न कुछ भी नहीं है, तथापि, सभी पिछले तत्व को छोड़कर हमेशा ठीक एक परिणाम के लिए समायोजित कर रहे हैं।

आम तौर पर हम फ़ंक्शंस कॉल देखते हैं जो एक या अधिक परिणाम लौटाते हैं केवल पहले के साथ छोड़ दिया जाता है। यहां कोई परिणाम नहींnil से भी भरा हुआ है।

+0

मुझे समझ में नहीं आता कि यह क्यों प्रिंट नहीं करता है! " फिर? और 2 नील क्यों नहीं? – warspyking

+0

@ वार्सपीकिंग, जैसा कि @YuHao ने कहा, अंतिम कार्य 'शून्य' प्रिंट नहीं करता है, क्योंकि यह 'शून्य' वापस नहीं करता है (यह इसके बदले कुछ भी नहीं देता है)। दूसरे से अंतिम फ़ंक्शन का नतीजा 'शून्य' के रूप में दिखाया गया है, क्योंकि यह कुछ भी नहीं (अंतिम कार्य के समान) देता है, परिणाम परिणाम की सही संख्या को रखने के लिए * समायोजित * 'nil' है। इसे 'एक्स (सत्य) में बदलें, एक्स (झूठा), 1'; आप चाहते हैं कि परिणाम '"हो!", शून्य, 1' और नहीं' "!", 1', है ना? –

+0

@ पॉल मुझे लगता है कि यह सच है, लेकिन अगर यह "परिणामों की सही संख्या रखना" चाहता है तो अंतिम क्यों समायोजित नहीं होता? – warspyking

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