एम-फ़ाइल (यानी मुख्य फ़ंक्शन ) में पहला फ़ंक्शन , उस एम-फ़ाइल को कॉल करने पर आह्वान किया जाता है। यह आवश्यक नहीं है कि मुख्य फ़ंक्शन का नाम एम-फ़ाइल के समान हो, लेकिन स्पष्टता के लिए यह होना चाहिए । जब फ़ंक्शन और फ़ाइल का नाम अलग होता है, तो मुख्य फ़ंक्शन को कॉल करने के लिए फ़ाइल नाम का उपयोग किया जाना चाहिए।
एम-फाइल में सभी बाद के कार्य, जिसे स्थानीय कार्यों (या पुरानी शब्दावली में "सबफंक्शन) कहा जाता है, को केवल उस एम-फाइल में मुख्य फ़ंक्शन और अन्य स्थानीय कार्यों द्वारा बुलाया जा सकता है। अन्य m-files में कार्य उन्हें नहीं कह सकते। R2016b में शुरू, आप स्थानीय कार्यों को स्क्रिप्ट में भी जोड़ सकते हैं , हालांकि स्कूपिंग व्यवहार अभी भी समान है (यानी उन्हें केवल स्क्रिप्ट के भीतर से ही बुलाया जा सकता है)।
इसके अलावा, आप अन्य कार्यों के भीतर कार्यों की घोषणा भी कर सकते हैं । इन्हें नेस्टेड फ़ंक्शन कहा जाता है , और इन्हें केवल फ़ंक्शन के भीतर से बुलाया जा सकता है। वे उन कार्यों में चर तक भी पहुंच सकते हैं जिनमें वे नेस्टेड हैं, जो उनके साथ काम करने के लिए थोड़ा उपयोगी होता है।
विचार के लिए अधिक भोजन ...
ऊपर उल्लिखित सामान्य फ़ंक्शन स्कूपिंग व्यवहार के आस-पास कुछ तरीके हैं, जैसे कि फ़ंक्शन फ़ंक्शन हैंडल आउटपुट के रूप में SCFrench और Jonas (जो R2013b में शुरू होता है, localfunctions
फ़ंक्शन द्वारा सुगम किया गया है) से वर्णित है । हालाँकि, मैं यह सुझाव नहीं दूंगा कि आप इस तरह के ट्रिक का सहारा लें, क्योंकि आपके कार्यों और फाइलों को व्यवस्थित करने के लिए बहुत बेहतर विकल्प हैं।
उदाहरण के लिए, मान लीजिए कि आप एक मुख्य कार्य है चलो A
एक मीटर फ़ाइल में A.m
, स्थानीय कार्यों के साथ-साथ D
, E
, और F
। अब मान लीजिए कि आप दो अन्य संबंधित कार्यों जाने B
और C
एम-फाइलों में B.m
और C.m
क्रमशः, यह है कि आप भी कॉल करने के लिए सक्षम होना चाहते हैं D
, E
, और F
। आपके पास कुछ विकल्प हैं:
रखो D
, E
और F
प्रत्येक अपनी अलग-अलग एम-फाइलों में, किसी भी अन्य फ़ंक्शन को उन्हें कॉल करने की अनुमति देता है। नकारात्मक पक्ष यह है कि इन कार्यों के दायरे बड़ी है और अभी तक सीमित नहीं होता है A
, B
और C
, लेकिन उल्टा है कि इस काफी सरल है।
एक बनाएँ defineMyFunctions
के साथ (जोनास 'उदाहरण की तरह) एम-फ़ाइल D
, E
और F
स्थानीय कार्य करता है और एक मुख्य समारोह के रूप में कि बस रिटर्न उन्हें हैंडल कार्य करते हैं। यह आपको रखने के लिए अनुमति देता है D
, E
और, F
एक ही फाइल में है, लेकिन यह किसी भी समारोह है कि कॉल कर सकते हैं के बाद से इन कार्यों के दायरे के बारे में कुछ नहीं करता defineMyFunctions
उन्हें आह्वान कर सकते हैं। फिर आपको यह भी सुनिश्चित करना होगा कि फ़ंक्शन हैंडल को पास करने के लिए तर्क के रूप में यह सुनिश्चित करने के लिए कि आपके पास उनकी ज़रूरत है जहां आपको उनकी आवश्यकता है।
कॉपी D
, E
और F
में B.m
और C.m
स्थानीय कार्यों के रूप में। यह सीमा केवल करने के लिए उनके उपयोग का दायरा A
, B
, और C
, लेकिन बनाता है अद्यतन करने और अपने कोड एक बुरा सपना के रखरखाव क्योंकि आप अलग अलग स्थानों में एक ही कोड के तीन प्रतियां।
निजी कार्यों का उपयोग करें ! यदि आपके पास A
, B
और C
एक ही निर्देशिका में है, तो आप एक उपनिर्देशिका कहा जाता है बना सकते हैं private
और जगह D
, E
है, और F
वहाँ में, एक अलग एम-फ़ाइल के रूप में प्रत्येक। यह उनके कार्यक्षेत्र को सीमित करता है इसलिए वे केवल ठीक उसके ऊपर निर्देशिका में कार्यों के द्वारा कहा जा सकता है (यानी A
, B
है, और C
) और उन्हें एक ही स्थान पर एक साथ रहता है (लेकिन अभी भी विभिन्न एम-फ़ाइलें):
myDirectory/
A.m
B.m
C.m
private/
D.m
E.m
F.m
यह सब कुछ आपके प्रश्न के दायरे से बाहर चला जाता है, और संभवतः आपकी आवश्यकता से अधिक विवरण है, लेकिन मैंने सोचा कि आपकी सभी एम-फाइलों के आयोजन की अधिक सामान्य चिंता को छूना अच्छा हो सकता है। ;)
^
, @idigas