MATLAB全局变量的最佳替代方案

时间:2012-01-10 18:33:42

标签: performance matlab global-variables

我正在编写一个MATLAB应用程序,它有许多功能分布在不同的文件中。我有一个记录器,它是一个带有函数指针的结构,我用它来记录用户要查看的信息(即,当前正在执行哪个函数,计算结果等)。我为记录器使用结构而不仅仅是fprintf()的原因是我将来可以轻松地用XML记录器,HTML记录器等替换它。

由于我的代码由许多相互调用的函数组成,我将我的logger结构声明为全局,因此我不必将它传递给我的所有函数。然而,在我看来,我看到全局变量在MATLAB中是邪恶的化身,并且会大大减慢我的程序。

有没有办法让各个文件之间的变量可用而不必将它们作为输入参数传递,并且不会受到严重的性能损失?

2 个答案:

答案 0 :(得分:10)

您还可以在文件中使用持久性关键字,并在那里分配记录器 它在某些方面类似于C ++中的 static 关键字。它也是 Singleton 模式的实现。

function CallLogger(st)
    persistent logger;
    if isempty(logger)
        %Allocate new logger
    end
    logger.disp(st);
end

它比全球更好,因为
 1.没有人知道,没有人可以摧毁你的记录器  2.没有人知道这个对象,因为它仅限于功能范围

顺便说一句,我不同意全球性有问题。就软件工程而言,这不是一个好习惯。

答案 1 :(得分:2)

比调用函数中的持久变量(例如,如果保存然后重新加载工作区将不会保存)更好的是从函数+结构移动到对象:也就是说,你应该看一下MATLAB的面向对象编程。