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

dzi*_*ner 10 performance matlab global-variables

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

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

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

And*_*ein 10

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

function CallLogger(st)
    persistent logger;
    if isempty(logger)
        %Allocate new logger
    end
    logger.disp(st);
end
Run Code Online (Sandbox Code Playgroud)

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

顺便说一句,我不同意全球性有问题.就软件工程而言,这不是一个好的做法.