2012-11-14 34 views
5

我有一个名为histShape.m的文件,其功能为histShape,还有一些其他功能。如何在Matlab中为几个函数声明一个全局变量?

一般的代码的观点是:

% 
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

是的,如果你在每个应该共享的函数中使用'global'。 –

+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 

或用一个结构

%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 

如果可以避免使用全局变量,则永远不要使用全局变量。

相关问题