MATLAB

2010-01-11 13 views
5

में फ़ंक्शन पैरामीटर लॉगिंग मैं MATLAB में किसी फ़ंक्शन को पास किए गए सभी इनपुट पैरामीटर के लिए एक सामान्यीकृत लॉगिंग फ़ंक्शन लिखने की कोशिश कर रहा हूं। क्या पैरामीटर को व्यक्तिगत रूप से नामित किए बिना सभी इनपुट पैरामीटर को किसी अन्य फ़ंक्शन पर आसानी से पास करना संभव है? लॉगिंग फ़ंक्शन में, मैं निश्चित रूप से पैरामीटर नाम प्राप्त करने के लिए लूप में inputname(i) का उपयोग कर सकता हूं। मैं मुख्य कार्य में इस तर्क को निष्पादित नहीं करना चाहूंगा। तो, LogParams(allInputParams) जैसे कुछ करने का कोई तरीका है?MATLAB

उत्तर

8

ऐसा लगता है कि आप एक मुख्य कार्य है, और है कि समारोह से आप चर मुख्य कार्य करने के लिए पारित कर दिया के नामों की एक सूची प्राप्त करने के एक समारोह LogParams कॉल करना चाहते हैं।

function names = LogParams 
    names = evalin('caller','arrayfun(@inputname,1:nargin,''UniformOutput'',0)'); 
end 

उत्पादन LogParams से लौटे चर समारोह है कि LogParams कॉल करने के लिए पारित कर दिया के नाम वाला कोई कक्ष सरणी हो जाएगा: यहाँ एक तरह से आप अपने समारोह LogParams को लागू कर सकता है। उपर्युक्त समाधान निम्न कार्यों का उपयोग करता है:

  • EVALIN: कॉलिंग फ़ंक्शन के कार्यक्षेत्र में अभिव्यक्ति का मूल्यांकन करने के लिए।
  • ARRAYFUN: लूप के विकल्प के रूप में।
  • NARGIN: फ़ंक्शन में पास किए गए तर्कों की संख्या प्राप्त करने के लिए।
  • INPUTNAME: इनपुट चर का नाम प्राप्त करने के लिए।

कैसे LogParams काम करता है, निम्नलिखित समारोह है कि यह कॉल बनाने का एक उदाहरण के रूप में:

function main_function(a,b,varargin) 
    disp(LogParams); 
end 

और अब (आदानों की एक संख्या चर x, y संभालने से कॉल करने, और z परिभाषित कर रहे हैं वर्कस्पेस में):

>> main_function(x,y) 
    'x' 'y' 

>> main_function(x,y,z) 
    'x' 'y' 'z' 

>> main_function(x,y,z,z,z,z) 
    'x' 'y' 'z' 'z' 'z' 'z' 
+0

बहुत साफ! .......... (15 अक्षर तक पैड करने के लिए डॉट्स) –

+0

धन्यवाद। यह सहायता करता है। कॉलिंग फ़ंक्शन पर न्यूनतम प्रभाव के लिए –

+0

+1। – Marc