2012-11-14 30 views
5

Mam plik o nazwie histShape.m z funkcją histShape oraz kilka innych funkcji.Jak mogę zadeklarować zmienną globalną w Matlab dla kilku funkcji?

Ogólny widok kodu jest:

% 
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 

mogę używać global x y z; ale szukam innego sposobu.

Chcę zadeklarować zmienną PIXELS jako globalną, jak mogę to zrobić?

Pozdrowienia

+0

Zamiast przekazywać zmienną zakresu jako parametry funkcji, należy używać zmiennej globalnej. Zobacz moją odpowiedź na przykład. – Dan

Odpowiedz

12

Można uzyskać dostęp do globalnej zmiennej wewnątrz funkcji MATLAB za pomocą słowa kluczowego global:

function my_super_function(my_super_input) 
    global globalvar; 

    % ... use globalvar 
end 

Zazwyczaj zadeklarować zmienną globalną w skrypcie poza funkcją przy użyciu tego samego słowo kluczowe:

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

Jednak nie jest to bezwzględnie konieczne. Dopóki nazwa zmiennej globalnej jest zgodna między funkcjami, można udostępnić tę samą zmienną, definiując po prostu global globalvar; w dowolnej funkcji, którą napiszesz.

Wszystko, co powinieneś zrobić, to zdefiniowanie global PIXELS; na początku każdej funkcji (przed przypisaniem jej wartości).

Zobacz oficjalną dokumentację here.

+0

Tak, ale zmienna globalna nie jest współdzielona z innymi funkcjami, to jest problem .. – ron

+2

Tak, to jest .... jeśli używasz 'global' w każdej funkcji, która powinna współdzielić. –

+0

@babydanks: Rozumiem, dzięki! +1 i wybrane! – ron

4

Alternatywą dla ogólnie niepożądanego użycia zmiennych globalnych jest po prostu przekazanie zmiennej PIXELS do każdej funkcji. Jeśli masz ich wiele, możesz stworzyć strukturę, która je pomieści.

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

    .... 
    .... 
end 



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

.... 
.... 

end 

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

    .... 
    .... 

end 

Albo z struct

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

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

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

Jeśli jedynym powodem korzystania z globalnych w pytaniu jest powiązany z kodem pisał, to najlepszym rozwiązaniem jest użycie nested functions. Wszystko, co musisz zrobić, to przenieść pierwszy przykład z Twojego przykładu na sam dół pliku i gotowe.

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 

Nigdy nie używaj zmiennych globalnych, jeśli możesz tego uniknąć.

Powiązane problemy