दिलचस्प पोस्ट
बास में एक स्ट्रिंग से एक निश्चित उपसर्ग / प्रत्यय निकालें एएसपी एमवीसी को एक नियंत्रक कारखाना जोड़ना सीएसएस में कई परिवर्तन कैसे लागू करें? किसी ऑब्जेक्ट को रिक्त बनाम डिस्पोज़ (सेट करना) सी # इंटरफेस फ़ील्ड क्यों नहीं रख सकते? धराशायी सीमा स्ट्रोक की लंबाई और स्ट्रोक के बीच की दूरी को नियंत्रित करें कोटलिन में, नलनीय मूल्यों से निपटने के लिए मुहावरेदार तरीका क्या है, उन्हें संदर्भित करना या परिवर्तित करना .NET पर डबल सटीक समस्याएं एंड्रॉइड ओपन पीडीएफ फाइल प्ले 2.x: एक सामान्य बटन के साथ एक AJAX अनुरोध कैसे करें JSON प्रकार के अंदर सरणी तत्वों की क्वेरी HttpContext का उपयोग करना। WebApi में मौजूद है क्योंकि async के खतरनाक है बाहरी कक्षा के "इस" को आंतरिक कक्षा से कैसे पहुंचा जा सकता है? INSERT पर SQL इंजेक्शन वैक्टर के एक वेक्टर द्वारा दर्शाए गए मैट्रिक्स का पहला कॉलम प्राप्त करें

क्या MATLAB में प्रति फाइल एक से अधिक फ़ंक्शन परिभाषित करना संभव है, और उस फाइल से बाहर का उपयोग कर सकते हैं?

जब मैं ईई में अपनी स्नातक की डिग्री के लिए पढ़ रहा था, तो MATLAB को अपनी फाइल में परिभाषित करने के लिए प्रत्येक फ़ंक्शन की आवश्यकता होती है, भले ही वह एक-लाइनर हो।

मैं अब स्नातक की डिग्री के लिए पढ़ रहा हूं, और मुझे MATLAB में एक परियोजना लिखनी है। क्या यह अभी भी MATLAB के नए संस्करणों के लिए एक आवश्यकता है?

यदि फ़ाइल में एक से अधिक कार्य करना संभव है, तो क्या इस पर कोई प्रतिबंध है? उदाहरण के लिए, क्या फ़ाइल में सभी फ़ंक्शंस फ़ाइल के बाहर से पहुंचा जा सकती हैं, या फ़ंक्शन केवल उसी फ़ंक्शन के रूप में फाइल के समान है?

नोट: मैं MATLAB रिहाई R2007b का उपयोग कर रहा हूँ

वेब के समाधान से एकत्रित समाधान "क्या MATLAB में प्रति फाइल एक से अधिक फ़ंक्शन परिभाषित करना संभव है, और उस फाइल से बाहर का उपयोग कर सकते हैं?"

M-file ( मुख्य फ़ंक्शन ) में पहला फ़ंक्शन, तब लागू होता है जब उस m-फ़ाइल को कहा जाता है यह आवश्यक नहीं है कि मुख्य समारोह में एम-फाइल के समान नाम है, लेकिन स्पष्टता के लिए यह होना चाहिए । फ़ंक्शन और फ़ाइल नाम अलग होने पर, फ़ाइल नाम का उपयोग मुख्य फ़ंक्शन को कॉल करने के लिए किया जाना चाहिए।

एम-फाइल में सभी बाद के फ़ंक्शन, जिन्हें स्थानीय फ़ंक्शन (या पुराने शब्दावली में "सबफंक्शन") कहते हैं, को केवल उस फ़ंक्शन में मुख्य फ़ंक्शन और अन्य स्थानीय फ़ंक्शन द्वारा बुलाया जा सकता है। अन्य एम-फाइल्स में फ़ंक्शंस उन्हें कॉल नहीं कर सकते।

इसके अलावा, आप फ़ंक्शन को अन्य फ़ंक्शन के अंदर भी घोषित कर सकते हैं। इन्हें नेस्टेड फ़ंक्शंस कहा जाता है , और इन्हें केवल वे फ़ंक्शंस के भीतर से बुलाया जा सकता है जो वे नेस्टेड हैं। वे उन कार्यों में वेरिएबल्स तक पहुंच सकते हैं जिनमें वे नेस्टेड हैं, जिससे उन्हें काम करने के लिए थोड़ा मुश्किल हो सकता है।

सोचा के लिए अधिक भोजन …

उपरोक्त उल्लिखित सामान्य फ़ंक्शन स्कॉपिंग व्यवहार के आसपास तरीके हैं, जैसे फ़ंक्शन को आउटपुट तर्कों के रूप में पारित करना जो कि योनास के उत्तर में उल्लिखित है। हालांकि, मैं ऐसी युक्तियों का सहारा लेने की आदत बनाने का सुझाव नहीं देता, क्योंकि आपकी फाइलें व्यवस्थित करने के लिए संभवतः बेहतर विकल्प हैं

उदाहरण के लिए, मान लें कि आपके पास एम-फाइल Am में एक मुख्य फ़ंक्शन A है, साथ ही स्थानीय कार्यों D , E और F । अब मान लें कि आपके पास दो अन्य संबंधित कार्य B और C एम-फाइल्स Bm और Cm हैं, जिन्हें आप D , E और F पर कॉल करने में सक्षम होना चाहते हैं। आपके पास कुछ विकल्प हैं:

  • D , E और F को अपनी अलग-अलग एम-फाइल्स में रखिए, किसी अन्य फ़ंक्शन को कॉल करने के लिए उन्हें अनुमति दें। नकारात्मकता यह है कि इन कार्यों का दायरा बड़ा है और केवल A , B और C तक ही सीमित नहीं C , लेकिन यह ऊपर की तरफ है कि यह बहुत आसान है।

  • D , E और F साथ स्थानीय फ़ंक्शन के रूप में एक defineMyFunctions एम-फाइल (जैसे जोनास के उदाहरण में) और एक मुख्य फ़ंक्शन बनाएं, जो केवल फ़ंक्शन को उनके लिए हैंडल देता है। इससे आपको एक ही फाइल में D , E और F रखने की अनुमति मिल जाती है, लेकिन ये फ़ंक्शन के दायरे के बारे में कुछ भी नहीं करता है, क्योंकि किसी भी फ़ंक्शन defineMyFunctions कर सकते हैं, जो defineMyFunctions उन्हें defineMyFunctions सकते हैं। फिर आपको फ़ंक्शन को पारित करने के बारे में चिंता करने की ज़रूरत पड़ती है, तर्क के रूप में आसपास हैंडल करने के लिए यह सुनिश्चित करने के लिए कि आपके पास उन्हें कहां की आवश्यकता है।

  • स्थानीय कार्यों के रूप में D , E और F को Bm और Cm में कॉपी करें यह सिर्फ A , B और C लिए अपने उपयोग की गुंजाइश को सीमित करता C , लेकिन आपके कोड को दुःस्वप्न करने के लिए अद्यतन और रखरखाव करता है क्योंकि आपके पास अलग-अलग स्थानों पर समान कोड की तीन प्रतियां हैं

  • निजी कार्यों का उपयोग करें! यदि आपके पास उसी निर्देशिका में A , B और C , तो आप private नामक उपनिर्देशिका बना सकते हैं और वहां D , E और F स्थानांतरित कर सकते हैं, प्रत्येक एक अलग एम-फाइल के रूप में यह उनके दायरे को सीमित करता है ताकि वे केवल ऊपर तुरंत निर्देशिका (यानी A , B , और C ) में फ़ंक्शन द्वारा बुलाए जा सकते हैं और उन्हें एक ही स्थान पर रख सकते हैं (लेकिन अभी भी अलग-अलग एम-फाइल):

     myDirectory/ Am Bm Cm private/ Dm Em Fm 

यह आपके प्रश्न के दायरे से बाहर कुछ हद तक जाता है, और संभवतः आपके ज़रिए इसकी अधिक जानकारी है, लेकिन मैंने सोचा कि आपके सभी एम-फाइलों को व्यवस्थित करने की अधिक सामान्य चिंता को छूना अच्छा होगा। 😉

आम तौर पर, आपके प्रश्न का उत्तर नहीं है, आप प्रति फ़ाइल एक से अधिक बाह्य रूप से दिखाई देने वाली फ़ंक्शन को परिभाषित नहीं कर सकते। आप फ़ंक्शन को स्थानीय फ़ंक्शंस पर वापस कर सकते हैं, हालांकि, और ऐसा करने का एक सुविधाजनक तरीका यह है कि उन्हें किसी संरचना का क्षेत्र बनाना। यहाँ एक उदाहरण है:

 function funs = makefuns funs.fun1=@fun1; funs.fun2=@fun2; end function y=fun1(x) y=x; end function z=fun2 z=1; end 

और यहां यह प्रयोग किया जा सकता है:

 >> myfuns = makefuns; >> myfuns.fun1(5) ans = 5 >> myfuns.fun2() ans = 1 

एक ही फाइल में एकाधिक, अलग-अलग पहुंच वाले कार्य करने का एकमात्र तरीका ऑटैक्ट -ओरिएंटेड प्रोग्रामिंग का उपयोग करके STATIC पद्धतियों को परिभाषित करना है । आप फ़ंक्शन को myClass.static1() , myClass.static2() आदि के रूप में एक्सेस कर सकते हैं।

OOP कार्यक्षमता केवल आधिकारिक रूप से R2008a के बाद से समर्थित है, इसलिए जब तक आप पुरानी, ​​बिना दस्तावेजी OOP वाक्यविन्यास का उपयोग करना चाहते हैं, आपके लिए जवाब नहीं है, जैसा कि @gnovice द्वारा समझाया गया है

संपादित करें

एक फाइल के बाहर कई कार्यों को परिभाषित करने का एक और तरीका है जो बाहर से सुलभ है, एक फ़ंक्शन बनाने के लिए जो कई फ़ंक्शन हैंडल देता है दूसरे शब्दों में, आप अपनी परिभाषा फ़ंक्शन को [fun1,fun2,fun3]=defineMyFunctions फ़ंक्शन परिभाषित करें, जिसके बाद आप 1 [fun1,fun2,fun3]=defineMyFunctions out1=fun1(inputs) इत्यादि का उपयोग कर सकते हैं।

मुझे वास्तव में SCFrench का उत्तर पसंद है – मैं यह इंगित करना चाहूंगा कि यह असाइनिन फ़ंक्शन के उपयोग से सीधे कार्यस्थान में आयात करने के लिए इसे आसानी से संशोधित किया जा सकता है (ऐसा करने से मुझे बहुत सारे पायथन की "वाई से आयात एक्स" चीज करने का तरीका याद दिलाता है)

 function message = makefuns assignin('base','fun1',@fun1); assignin('base','fun2',@fun2); message='Done importing functions to workspace'; end function y=fun1(x) y=x; end function z=fun2 z=1; end 

और फिर इस प्रकार इस्तेमाल किया:

 >> makefuns ans = Done importing functions to workspace >> fun1(123) ans = 123 >> fun2() ans = 1 

एससीएफचेंच के उत्तर के समान लाइनों के साथ, लेकिन अधिक सी # शैली स्पिन के साथ।

मैं (और अक्सर करते हैं) कई स्थिर विधियों वाले वर्ग बनाते हैं I उदाहरण के लिए:

 classdef Statistics methods(Static) function val = MyMean(data) val = mean(data); end function val = MyStd(data) val = std(data); end end end 

जैसा कि विधियां स्थिर हैं, आपको कक्षा को स्थापित करने की आवश्यकता नहीं है। आप कार्यों को निम्नानुसार कहते हैं:

 data = 1:10; mean = Statistics.MyMean(data); std = Statistics.MyStd(data); 

मैं ओक्टेव के साथ एक। मी फ़ाइल में कई फ़ंक्शन को परिभाषित करता हूं और फिर उस फ़ाइल से। का उपयोग कर रहा हूँ जहां मुझे उस फाइल से फ़ंक्शन का उपयोग करने की आवश्यकता है:

 source("mycode.m"); 

निश्चित नहीं है कि क्या यह Matlab के साथ उपलब्ध है

 octave:8> help source 'source' is a built-in function -- Built-in Function: source (FILE) Parse and execute the contents of FILE. This is equivalent to executing commands from a script file, but without requiring the file to be named `FILE.m'. 

आप मुख्य फ़ंक्शन के साथ एक मुख्य फ़ाइल में फ़ंक्शन भी जोड़ सकते हैं, इस तरह से:

 function [varargout] = main( subfun, varargin ) [varargout{1:nargout}] = feval( subfun, varargin{:} ); % paste your subfunctions below .... function str=subfun1 str='hello' 

फिर सबफ़न 1 को कॉल करने से ऐसा दिखाई देगा: str = main ('subfun1')

R2017b के अनुसार, यह आधिकारिक रूप से संभव नहीं है। संबंधित दस्तावेज बताते हैं कि:

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

हालांकि, अन्य उत्तर में सुझाए गए समाधान के कुछ समान प्राप्त कर सकते हैं।