3

我写了一段代码,它调用了许多函数,而这些函数又调用了几个子函数。

我从命令行调用主文件并用某些参数补充调用以启动我所考虑的某些模式。

例如octave classify_file.m --debug <file>,将在我的自定义调试模式下运行,该模式设置一个常量debug1随后输出所有绘图和相关变量。省略参数仅输出 1 个变量。

同样,我有一个template和一个histogram模式,它们基本上都做同样的事情,除了根据模式输出更多的变量、矩阵和图。

就像现在一样,如果我希望它们受到各自模式的影响,我必须将debug,template和常量作为每个函数的参数。histogram

这既麻烦又令人困惑,必须有更好的方法。我从未使用过全局变量,但这是一个使用全局变量的好地方吗?这个问题的优雅解决方案是什么?

4

1 回答 1

1

在这种情况下,全局变量会派上用场,尽管您可能知道它们有时不受欢迎,并且在 matlab 中也会对性能产生一定的影响。就我个人而言,我不认为将模式一直沿调用堆栈传递下去太糟糕了——尽管您是否将所有 3 个都视为单独的参数?您至少可以将它们放入最高级别函数的结构中,这样您就只有 1 个参数:

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

或者,如果你一次只能有一种模式,那么一些整数常量呢?

mode = MODE_DEBUG

或者

mode = MODE_NONE

我将通过创建短函数来定义常量pi,例如常量的工作方式。

最后,还有一个我比较喜欢的全局变量的替代方案,它是使用持久变量的函数。例如:

function m = debugMode(newValue)
  persistant isModeOn;

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

这样你就可以调用debugMode(1)来设置它,你可以m = debugMode 在任何地方调用来获取值。

于 2013-05-08T10:09:53.783 回答