我编写了一段调用大量函数的代码,这些函数又调用了几个子函数。
我从命令行调用主文件并使用某些参数补充调用以启动我已考虑的某些模式。
E.g。 octave classify_file.m --debug <file>
将在我的自定义调试模式下运行,该模式将常量debug
设置为1
,然后输出所有绘图和相关变量。省略参数只输出1个变量。
类似地,我有一个template
和一个histogram
模式,除了根据模式输出更多变量,矩阵和图之外,它们基本上都做同样的事情。
就像现在一样,如果我希望它们受各自模式的影响,我必须将debug
,template
和histogram
常量作为参数包含在每个函数中。
这很麻烦且令人困惑,必须有更好的方法。我从未使用全局变量,但这是一个使用它的好地方吗?这个问题的优雅解决方案是什么?
答案 0 :(得分:1)
这种情况下全局变量会派上用场,尽管您可能知道它们有时会受到不满,并且在matlab中也会产生某些性能影响。就个人而言,我不认为在调用堆栈中一直传递模式太糟糕了 - 虽然你是否将所有3作为单独的参数处理?你能做的最少就是将它们放在最高级别函数的结构中,这样你只有一个参数:
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)
进行设置,然后您可以在任何地方{/ 1}} 调用来获取价值。