2015-10-23 12 views
8

मान लें कि मेरे पास कुछ MATLAB कोड है जो कुछ फ़ंक्शंस का उपयोग करता है। मैं उसी फ़ाइल में फ़ंक्शन को फ़ंक्शंस का उपयोग करने वाले कोड के रूप में परिभाषित नहीं करना चाहता हूं।मैटलैब कोड कैसे व्यवस्थित करें?

दूसरी ओर, प्रत्येक फ़ंक्शन के लिए एम फ़ाइल बनाने का समाधान मेरे लिए भी अच्छा नहीं है क्योंकि मुझे बहुत सारी फाइलें नहीं चाहिए। मैं जो चाहता हूं वह एक यूटिल फाइल की तरह कुछ है जो उन कार्यों को रखता है, जिससे मैं पाइथन में जैसे कार्यों को आयात कर सकता हूं, उदाहरण के लिए।

आप क्या सलाह देंगे?

+0

वहाँ Matlab समारोह ब्राउज़र, जो दुर्भाग्य से केवल मैटलैब शेयर कार्यों से पता चलता है। इसमें कुछ अनियंत्रित मैटलैब सुविधाएं हो सकती हैं जो उपयोगकर्ता द्वारा प्रदान किए गए कार्यों के लिए फ़ंक्शन ब्राउज़र का उपयोग करना संभव कर सकती हैं। – JaBe

+0

यहां एक [निकट से संबंधित प्रश्न] है (http://stackoverflow.com/q/3569933/52738)। आपको वहां कुछ सहायक विचार मिल सकते हैं। ऐसा लगता है जैसे आप जोनास के उत्तर (वस्तु-उन्मुख मार्ग) में कुछ चाहें। – gnovice

उत्तर

12

आप शायद package का उपयोग करना चाहते हैं, जो कि एक पायथन मॉड्यूल की तरह है जिसमें यह एक फ़ोल्डर है जो एकाधिक फ़ाइलों को पकड़ सकता है। आप फ़ोल्डर नाम की शुरुआत में + डालकर ऐसा करते हैं, जैसे +mypackage। इसके बाद आप पाइथन के समान package.function नोटेशन का उपयोग करके फ़ोल्डर में कार्यों और वर्गों तक पहुंच सकते हैं, बिना कार्यों के वैश्विक सूची को प्रदूषित किए बिना (केवल पैकेज को प्रत्येक सूची के बजाय वैश्विक सूची में जोड़ा जाता है)। आप व्यक्तिगत कार्यों या कक्षाओं को भी आयात कर सकते हैं। हालांकि, आपको हमेशा पूर्ण फ़ंक्शन पथ का उपयोग करना होगा, पाइथन में सापेक्ष पथ जैसी कोई चीज़ नहीं है।

हालांकि, यदि आप वास्तव में प्रति फ़ाइल एकाधिक फ़ंक्शन चाहते हैं, तो शायद आप सबसे अच्छा कर सकते हैं जो शीर्ष-स्तरीय फ़ंक्शन बनाता है जो फ़ाइल में अन्य कार्यों के लिए देता है, और उसके बाद फ़ंक्शन हैंडल एक्सेस करता है struct। चूंकि MATLAB को उन कार्यों के साथ () के उपयोग की आवश्यकता नहीं है, जिनके लिए किसी भी इनपुट की आवश्यकता नहीं है, यह एक पाइथन मॉड्यूल के समान ही व्यवहार करेगा (हालांकि मुझे नहीं पता कि यह प्रदर्शन को कैसे प्रभावित करेगा)।

मुझे पता है कि यह गर्दन में दर्द है। फ़ाइल कारणों की शुरुआत में + डालकर, जैसे कि वे वर्तमान में फ़ोल्डर्स के लिए पैकेज जैसे पैकेजों के रूप में फ़ाइलों का उपयोग करने की अनुमति नहीं दे सकते हैं। लेकिन वे नहीं करते हैं।

2

आप जो खोज रहे हैं उसके करीब एक समाधान कक्षाओं का उपयोग हो सकता है। एक वर्ग में वे विधियां होती हैं जो सार्वजनिक (बाहर से दिखाई दे सकती हैं) या निजी (केवल अंदर से दिखाई दे सकती हैं)। कक्षा के तरीकों के कार्यान्वयन या तो multiple files या उसी फ़ाइल में हो सकते हैं।

यहाँ एक साधारण उदाहरण use- की

classdef Class1 
    methods (Static) 
     function Hello 
      disp('hello'); 
     end 

     function x = Add(a,b) 
      x = Class1.AddInternal(a,b); 
     end 
    end 

    methods (Static, Access=private) 
     function x = AddInternal(a,b) 
      x = a+ b; 
     end 
    end 
end 

उदाहरण:

>> Class1.Hello 
hello 
>> Class1.Add(1,2) 

ans = 

    3 

>> Class1.AddInternal(2,3) 
Error using Class1.AddInternal 
Cannot access method 'AddInternal' in class 'Class1'. 
+0

क्या आप MATLAB पर कक्षाओं के उपयोग की अनुशंसा करेंगे? – yaron

+0

यह वास्तव में निर्भर करता है कि आप क्या कर रहे हैं ... ओओपी निश्चित रूप से कुछ संदर्भ में इसकी जगह है लेकिन सब कुछ के लिए इलाज नहीं है! – gregswiss

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