2013-05-08 26 views
3

我写了一段代码,它调用了许多函数,而这些代码又调用了多个子函数。在多个函数文件中设置操作模式的优雅方式

我正在从命令行调用主文件,并用某些参数补充了调用以启动某些我已经考虑过的模式。

E.g. octave classify_file.m --debug <file>将以我的自定义调试模式运行,该模式将常量debug设置为1,然后输出所有图和相关变量。省略参数只输出1个变量。

相似地,我有一个templatehistogram模式,除了根据模式输出更多的变量,矩阵和图表外,其他模块基本上都做同样的事情。

现在,我必须包括debugtemplate和常数作为参数给每个函数,如果我希望它们受到各自模式的影响。

这很麻烦和混乱,必须有更好的办法。我从来没有使用过全局变量,但是这会是一个使用它的好地方吗?什么是这个问题的优雅解决方案?

回答

1

这是一种全局变量可以派上用场的情况,虽然您可能已经意识到它们有时会被忽视,并且在matlab中也会有一定的性能影响。就我个人而言,我不认为一直沿着调用堆栈传递模式太糟糕了 - 尽管您将所有3个视为单独的参数?你可以做最不重要的是把它们放在一个struct在最高级别的功能,使您只有1个参数:

mode.debug = [whatever] 
mode.histogram = [whatever] 
mode.template = [whatever] 
myFunction(mode); 

,或者,如果你只能有一个模式,在对一些整型常量时间呢?

mode = MODE_DEBUG 

mode = MODE_NONE 

我会定义创建简短的函数的常数,这是pi不变作品,例如如何。

最后,还有一个替代我喜欢的全局变量,它是使用persistent变量的函数。例如:

function m = debugMode(newValue) 
    persistant isModeOn; 

    if nargin > 0 
    isModeOn = newValue 
    end 
    m = isModeOn; 
end 

这样,您就可以拨打debugMode(1)来设置它,你可以调用m = debugMode随时随地来获取值。

相关问题