2009-08-14 15 views
7

MATLAB में मैं एक फ़ाइल में एकाधिक फ़ंक्शंस को परिभाषित कर सकता हूं, केवल उस फ़ाइल के बाहरी रूप से पहले परिभाषित फ़ंक्शन दिखाई दे रहा है। वैकल्पिक रूप से, मैं प्रत्येक फ़ंक्शन को अपनी फ़ाइल में डाल सकता हूं और उन्हें पथ के माध्यम से वैश्विक रूप से दृश्यमान बना सकता हूं। मैं एक मेनू संचालित अनुप्रयोग लिख रहा हूं, जहां प्रत्येक मेनू आइटम एक अलग कार्य चलाता है। वर्तमान में, ये सब एक बड़ी फाइल में हैं, जो नेविगेट करने में तेजी से मुश्किल हो रही है। मैं क्या करना चाहता हूं संबंधित कार्यों के समूह अलग फाइलों में डाल दिया है।मैं MATLAB में 'शामिल' व्यवहार का अनुकरण कैसे करूं?

मुझे लगता है कि मैं इस तरह के कुछ बच्चे को एक अलग निर्देशिका में डालकर और फिर मेरे मूल कार्य में पथ को जोड़कर ऐसा कर सकता हूं, लेकिन यह थोड़ा गन्दा और सुरुचिपूर्ण लगता है।

क्या कोई बेहतर सुझाव दे सकता है?

नोट: मैं MATLAB 2006 के साथ सबसे परिचित हूँ, लेकिन मैं MATLAB 2009

+0

संबंधित: http://stackoverflow.com/questions/8883499/can-i-import-a-namespace-globally-without-explicitly-calling-import-in-each-and?lq=1 –

उत्तर

14

एक सुझाव, जो MATLAB path को संशोधित करने से बचने वाला है, private function directory का उपयोग करना है। उदाहरण के लिए:

मान लीजिए कि आपके पास \MATLAB\temp\ (जो पहले से ही MATLAB पथ पर है) में test.m नामक फ़ंक्शन है। यदि test.m में स्थानीय फ़ंक्शन हैं जो आप अपनी स्वयं की एम-फाइलों में रखना चाहते हैं, और आप केवल test.m चाहते हैं तो उन्हें एक्सेस करने के लिए, आप पहले में private नामक एक उपनिर्देशिका बनायेंगे। फिर, इस private उपनिर्देशिका में test.m से व्यक्तिगत स्थानीय फ़ंक्शन एम-फ़ाइलें डालें।

private उपनिर्देशिका MATLAB पथ में जोड़े जाने की जरूरत नहीं है (वास्तव में, यह पथ के लिए चीजों को ठीक से काम करने के लिए नहीं जोड़ा जाना चाहिए)। केवल फ़ाइल test.m और निर्देशिका में अन्य एम-फ़ाइलें तुरंत private उपनिर्देशिका ऊपर कार्यों उसमें शामिल की पहुंच है। निजी कार्यों का उपयोग करना, आप प्रभावी रूप से एक ही एम-फाइल में सभी कार्यों (जो कुछ अनुप्रयोगों के लिए बहुत बड़ा हो सकता है) डाल करने के लिए बिना local functions (अर्थात सीमित दायरे, समारोह से अधिक भार, आदि) के व्यवहार का अनुकरण कर सकते हैं।

+0

मुझे नहीं पता था कि आप यह कर सकते हैं। मैं यह देखने के लिए एक यात्रा दूंगा कि यह कैसे काम करता है। कम से कम सभी फ़ंक्शन फ़ाइलों को एक शांत कोने में छुपाया जाएगा! –

+1

ऐसा लगता है कि यहां से जुड़े दस्तावेज़ों को हटा दिया गया है! क्या निजी फ़ंक्शन निर्देशिका अप्रचलित मानी जाती हैं? – Dan

+1

@ डैन: नहीं, अप्रचलित नहीं। टीएमडब्ल्यू ने अपने ऑनलाइन दस्तावेज़ों को अपडेट करने के बाद से सिर्फ एक पुराना, बुरा लिंक। मैंने नए लिंक में संपादित किया है। – gnovice

5

हो सकता है कि कुछ इस तरह,

function foobar 
    addpath C:\Include\ModuleX 

    %% Script file residing in ModuleX 
    some_func(); 
end 
बेशक

, ModuleX के उन्नयन की प्रक्रिया में हूँ foobar से बाहर निकलने के बाद आपके खोज पथ में रहेंगे।

path(pathdef) 

अधिक जानकारी के लिए ADDPATH देखें: आप को पुन: प्रारंभ बिना डिफ़ॉल्ट पथ के लिए सेट करना चाहते हैं, तो इस पंक्ति जोड़ें।

+0

+1 इस वजह एक उचित समाधान है जिसे मैंने माना था। –

+0

मामले फ़ाइलें एक फ़ोल्डर पदानुक्रम में हैं, आप यह भी उन सभी को 'addpath (genpath (पथ)) के साथ जोड़ सकते हैं,'। ध्यान दें कि 'जेनपाथ' कमांड आमतौर पर बहुत धीमा होता है। – tashuhka

1

आप उप-फ़ोल्डर का उपयोग कर सकते हैं जो नामों में कार्यों को अलग करने के लिए "+" से शुरू होते हैं।

उदाहरण के लिए:

foo.bar() % prints hello world 

अधिक जानकारी पाया जा सकता है:

प्लेस फ़ोल्डर में एक समारोह "बार" "+ foo"

function bar() 
print('hello world'); 

इस समारोह के रूप में इस्तेमाल किया जा सकता यहां:

What is the closest thing MATLAB has to namespaces?

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