2012-11-14 16 views
5

मेरे पास histShape.m नामक एक फ़ाइल है जिसे histShape फ़ंक्शन और कुछ अन्य फ़ंक्शंस भी हैं।मैं कुछ कार्यों के लिए मैटलैब में वैश्विक चर कैसे घोषित कर सकता हूं?

एक कोड का एक सामान्य दृष्टिकोण है:

% 
function [outputImage] = histShape(srcimg, destimg) 

    PIXELS = 255 + 1; 

    .... 
    .... 
end 



% 
function [outputImage] = normalizeAndAccumulate(inputImage) 

    PIXELS = 255 + 1; 

.... 
.... 

end 

% 
function [pixels] = getNormalizedHistogram(histogram , inputImage) 


    PIXELS = 255 + 1; 

    .... 
    .... 

end 

मैं global x y z; उपयोग कर सकते हैं, लेकिन मैं एक अलग तरीके की तलाश में हूँ।

मैं वैरिएबल PIXELS वैश्विक रूप से घोषित करना चाहता हूं, मैं यह कैसे कर सकता हूं?

सादर

+0

बल्कि ग्लोबल का उपयोग करने के बजाय फ़ंक्शन पैरामीटर के रूप में एक स्कोप वैरिएबल पास करें। एक उदाहरण के लिए मेरा जवाब देखें। – Dan

उत्तर

12

आप कीवर्ड global का उपयोग करके एक MATLAB समारोह के अंदर एक वैश्विक चर में पहुँच प्राप्त कर सकते हैं:

function my_super_function(my_super_input) 
    global globalvar; 

    % ... use globalvar 
end 

आप आम तौर पर एक ही का उपयोग कर समारोह के बाहर एक स्क्रिप्ट में वैश्विक चर घोषणा करेंगे कीवर्ड:

% My super script 
global globalvar; 
globalvar = 'I am awesome because I am global'; 
my_super_function(a_nonglobal_input); 

हालांकि, यह कड़ाई से जरूरी नहीं है। जब तक वैश्विक चर का नाम फ़ंक्शंस के बीच संगत होता है, तब तक आप लिखने वाले किसी भी फ़ंक्शन में global globalvar; को परिभाषित करके समान चर साझा कर सकते हैं।

आपको बस अपने प्रत्येक कार्य की शुरुआत में global PIXELS; परिभाषित करने की आवश्यकता है (इससे पहले कि आप इसे मान दें)।

आधिकारिक दस्तावेज here देखें।

+0

हाँ, लेकिन वैश्विक चर को अन्य कार्यों के साथ साझा नहीं किया गया है, यह समस्या है .. – ron

+2

हां यह है .... यदि आप साझा करने वाले प्रत्येक फ़ंक्शन में 'वैश्विक' का उपयोग करते हैं। –

+0

@babydanks: मैं देखता हूं, धन्यवाद! +1 और चुने गए! – ron

4

वैश्विक चर के आम तौर पर अवांछित उपयोग के लिए एक विकल्प केवल आपके PIXELS चर में प्रत्येक फ़ंक्शन में पास होना है। यदि आपके पास बहुत सारे हैं तो आप उन्हें पकड़ने के लिए एक संरचना बना सकते हैं।

% 
function [outputImage] = histShape(srcimg, destimg, PIXELS) 

    .... 
    .... 
end 



% 
function [outputImage] = normalizeAndAccumulate(inputImage, PIXELS) 

.... 
.... 

end 

% 
function [pixels] = getNormalizedHistogram(histogram , inputImage, PIXELS) 

    .... 
    .... 

end 

या एक struct

%In the main script calling the functions 
    options.Pixels = 255 + 1 

    function [outputImage] = histShape(srcimg, destimg, options) 

     PIXELS = options.Pixels; 
     .... 
     .... 
    end 
    %etc... 
1

सवाल में वैश्विक प्रयोग करने के लिए एकमात्र कारण कोड से संबंधित है, तो साथ तैनात है, तो सबसे अच्छा समाधान nested functions उपयोग करने के लिए है। आपको बस इतना करना है कि फ़ाइल के बहुत नीचे अपने उदाहरण के पहले end को स्थानांतरित करें और आप कर चुके हैं।

function [outputImage] = histShape(srcimg, destimg) 
PIXELS = 255 + 1; 

function [outputImage] = normalizeAndAccumulate(inputImage) 
    PIXELS = 255 + 1; 
end 

function [pixels] = getNormalizedHistogram(histogram , inputImage) 
    PIXELS = 255 + 1; 
end 
end 

यदि आप इससे बच सकते हैं तो वैश्विक चर का कभी भी उपयोग नहीं करते हैं।

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