2012-11-14 7 views
5

Ho un file chiamato histShape.m con una funzione histShape e alcune altre funzioni.Come posso dichiarare una variabile globale in Matlab per alcune funzioni?

Una visione generale del codice è:

% 
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 

posso usare global x y z; ma sto cercando un modo diverso.

Desidero dichiarare la variabile PIXELS come globale, come posso fare?

saluti

+0

Piuttosto, passare una variabile di ambito come parametri di funzione che utilizzare un globale. Vedi la mia risposta per un esempio. – Dan

risposta

12

È possibile ottenere l'accesso a una variabile globale all'interno di una funzione di MATLAB utilizzando la parola chiave global:

function my_super_function(my_super_input) 
    global globalvar; 

    % ... use globalvar 
end 

Di solito dichiarare la variabile globale in uno script di fuori della funzione utilizzando lo stesso parola chiave:

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

Tuttavia, questo non è strettamente necessario. Finché il nome della variabile globale è coerente tra le funzioni, è possibile condividere la stessa variabile semplicemente definendo global globalvar; in qualsiasi funzione che si scrive.

Tutto quello che dovresti fare è definire global PIXELS; all'inizio di ciascuna delle tue funzioni (prima di assegnargli un valore).

Vedere la documentazione ufficiale here.

+0

Sì, ma la variabile globale non è condivisa con le altre funzioni, questo è il problema .. – ron

+2

Sì lo è .... se si utilizza 'global' in ogni funzione che dovrebbe condividere. –

+0

@babydanks: Capisco, grazie! +1 e scelto! – ron

4

Un'alternativa all'utilizzo generalmente indesiderato di variabili globali è solo il passaggio della variabile PIXELS a ciascuna funzione. Se ne hai molti, potresti creare una struttura per tenerli.

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

    .... 
    .... 
end 



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

.... 
.... 

end 

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

    .... 
    .... 

end 

O con una struct

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

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

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

Se l'unica ragione per usare globali nella domanda è legata al codice inviato, allora la soluzione migliore è quella di utilizzare nested functions. Tutto quello che devi fare è spostare il primo end dell'esempio nella parte inferiore del file e il gioco è fatto.

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 

non utilizzare mai le variabili globali se è possibile evitarlo.