क्या आप रनटाइम पर निर्धारित कर सकते हैं यदि निष्पादित कोड फ़ंक्शन या स्क्रिप्ट के रूप में चल रहा है? यदि हां, तो अनुशंसित विधि क्या है?यह निर्धारित करने के लिए कि कोड स्क्रिप्ट या फ़ंक्शन के रूप में निष्पादित कर रहा है या नहीं?
उत्तर
+1 एक बहुत ही रोचक प्रश्न के लिए।
मैं इसे निर्धारित करने का एक तरीका सोच सकता हूं। निष्पादित एम-फाइल को स्वयं पार्स करें और पहले गैर-तुच्छ गैर-टिप्पणी पंक्ति में पहला शब्द देखें। यदि यह function
कीवर्ड है, तो यह एक फ़ंक्शन फ़ाइल है। यदि यह नहीं है, तो यह एक स्क्रिप्ट है।
strcmp(textread([mfilename '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
परिणामस्वरूप मूल्य 1 होना चाहिए अगर यह एक समारोह फ़ाइल है, और 0 अगर यह एक स्क्रिप्ट है: यहाँ एक साफ एक लाइनर है।
ध्यान रखें कि इस कोड को एम-फाइल से प्रश्न में चलाने की जरूरत है, न कि एक अलग फ़ंक्शन फ़ाइल से। आप में से है कि (यानी एक है कि किसी भी एम-फ़ाइल का परीक्षण करती है) बाहर एक सामान्य समारोह बनाना चाहते हैं, बस textread
के लिए वांछित फ़ाइल नाम स्ट्रिंग गुजरती हैं, तो जैसे:
function y = isfunction(x)
y = strcmp(textread([x '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
इस समारोह और अधिक मजबूत बनाने के लिए , आप एरर-हैंडलिंग कोड भी जोड़ सकते हैं जो सत्यापित करता है कि एम-फाइल वास्तव में textread
पर प्रयास करने से पहले मौजूद है।
एक और तरीका है। nargin(...)
एक स्क्रिप्ट पर कॉल होने पर त्रुटि देता है। इसलिए निम्न लघु कार्य को आप जो करना चाहते हैं, उसे करना चाहिए:
function result = isFunction(functionHandle)
%
% functionHandle: Can be a handle or string.
% result: Returns true or false.
% Try nargin() to determine if handle is a script:
try
nargin(functionHandle);
result = true;
catch exception
% If exception is as below, it is a script.
if (strcmp(exception.identifier, 'MATLAB:nargin:isScript'))
result = false;
else
% Else re-throw error:
throw(exception);
end
end
यह सबसे सुंदर तरीका नहीं हो सकता है, लेकिन यह काम करता है।
सम्मान
यह बहुत अच्छा है, धन्यवाद! – slayton
बिल्कुल सही, धन्यवाद! – slayton