2013-03-17 2 views
6

से स्थानीय कार्यों को कॉल करना मेरे पास एक एम-फाइल में local function परिभाषित है। उदाहरण के लिए:कमांड लाइन

% begining of public_function.m file 
function fh = public_function() 
% 
% do some computation... 

fh = @local_function; % return function handle to local function defined below 

function y = local_function(x) 
% 
% a local function inside public_function.m file 
% 

% some manipulation on x 
y = x; 

% end of public_function.m file NOTE THAT local_function is NOT nested 

अब, मैं कमांड लाइन से local_function (और public_function से नहीं) कॉल करना चाहते हैं। मैं समारोह संभाल public_function से लौटे का उपयोग कर ऐसा करने में सक्षम था:

>> fh = public_function(); % got handle to local_function 
>> y = fh(x); % calling the local function from command line :-) 

मेरा प्रश्न:
वहाँ किसी अन्य तरीके से (अलग स्पष्ट रूप से पारित समारोह संभाल) कमांड लाइन से स्थानीय समारोह कॉल करने के लिए (या अन्य है एम-फ़ाइल/कार्य)?

अधिक सटीक, मैं किसी फ़ाइल में किसी स्थानीय फ़ंक्शन तक पहुंचने का तरीका चाहता हूं (बशर्ते कि मैं इसका नाम जानूं)। इसलिए, अगर मेरे पास public_function.m फ़ाइल (और फ़ंक्शन) है और I पता है कि local_function उस फ़ाइल के लिए स्थानीय है, तो क्या कमांड लाइन से local_function तक पहुंचने का कोई तरीका है?

+2

आप मुख्य कार्य के तर्क के रूप में उप-समारोह के नाम पर पारित कर सकते हैं। दूसरा उदाहरण देखें: http://www.mathworks.de/support/solutions/en/data/1-19LN6/?solution=1-19LN6 –

+0

क्या आपने matlab फ़ाइल एक्सचेंज पर mklib को चेक किया था? यह आपके द्वारा फ़ंक्शन तर्क के रूप में सूचीबद्ध फ़ाइल में स्वचालित रूप से किसी भी स्थानीय फ़ंक्शन को हैंडल बनाता है: http://www.mathworks.de/matlabcentral/fileexchange/7597-mklib-a-pedestrian-function-library-loader- जनरेटर –

+0

एक बेहतर प्रश्न यही कारण है कि यदि आप इसे एम-फाइल के बाहर से कॉल करने की दबाने की ज़रूरत है तो आप फ़ंक्शन को स्थानीय फ़ंक्शन बना रहे हैं। स्थानीय कार्य करने का विचार अपने दायरे को सीमित करना है। शायद आपको इसे अपनी एम-फाइल में रखना चाहिए, या इसे एक निजी समारोह बनाना चाहिए। मैं अधिक जानकारी के लिए [इस सवाल] (http://stackoverflow.com/q/3569933/52738) पर एक नज़र डालने का सुझाव देता हूं। – gnovice

उत्तर

4

The official documentation का कहना है कि:

... आप कमांड लाइन से या अन्य फ़ाइलों पर कार्य से एक स्थानीय फ़ंक्शन को कॉल नहीं कर सकते।

इसके अनुसार, आपको कॉलर को अपने हैंडल को अपने एम-फाइल के बाहर अप्रत्यक्ष रूप से आमंत्रित करने की अनुमति देने के लिए पास करना होगा। मेरा मानना ​​है कि अन्यथा स्थानीय कार्यों तक पहुंचने के लिए कोई दस्तावेज समझदार तरीका नहीं है।

अजीब तरह हालांकि, आप अभी भी इस help के साथ क्या कर सकते हैं:

help public_function>local_function 
+0

मैं 'मदद' व्यवहार के आधार पर कुछ "आप स्थानीय फ़ंक्शन को कॉल नहीं कर सकते ..." के आसपास काम करने के लिए कुछ अनियंत्रित तरीके से मछली पकड़ने पर काफी उम्मीद कर रहा हूं ... – Shai

+1

@Shai हाँ, मैं भी। भले ही मैंने यह उत्तर पोस्ट किया, फिर भी मैं देख रहा हूं। –

+0

@Shai: शायद आप अंत में हासिल करने की कोशिश कर रहे हैं जो आप जोड़ सकते हैं? क्या आप मनमाने ढंग से फाइलों में किसी भी स्थानीय फ़ंक्शन तक पहुंचने का कोई तरीका ढूंढ रहे हैं, या क्या आप रोज़गार के उपयोग के लिए बहुत सारे उप-कार्यों के साथ "मास्टर फ़ंक्शन" चाहते हैं? –