Performance MATLAB的最佳替代品';s全局变量
我正在编写一个应用程序,它有许多函数分布在不同的文件中。我有一个logger,它是一个带有函数指针的结构,我使用它来记录信息以供用户查看(即,当前正在执行的函数、计算结果等)。我之所以使用struct作为记录器,而不仅仅是Performance MATLAB的最佳替代品';s全局变量,performance,matlab,global-variables,Performance,Matlab,Global Variables,我正在编写一个应用程序,它有许多函数分布在不同的文件中。我有一个logger,它是一个带有函数指针的结构,我使用它来记录信息以供用户查看(即,当前正在执行的函数、计算结果等)。我之所以使用struct作为记录器,而不仅仅是fprintf(),是因为将来我可以很容易地用XML记录器、HTML记录器等替代它 由于我的代码由许多相互调用的函数组成,因此我将logger结构声明为全局结构,因此不必将其传递给所有函数。然而,无论我在哪里看到,全局变量在MATLAB中都是邪恶的化身,这将大大降低我的程序速度
fprintf()
,是因为将来我可以很容易地用XML记录器、HTML记录器等替代它
由于我的代码由许多相互调用的函数组成,因此我将logger结构声明为全局结构,因此不必将其传递给所有函数。然而,无论我在哪里看到,全局变量在MATLAB中都是邪恶的化身,这将大大降低我的程序速度
有没有一种方法可以使变量在文件中可用,而不必将其作为输入参数传递,也不会受到严重的性能损失?您还可以在文件中使用persistent关键字,并在其中分配记录器。
它在某些方面与C++中的“强>静态<强”关键字相似。它也是单例模式的实现
function CallLogger(st)
persistent logger;
if isempty(logger)
%Allocate new logger
end
logger.disp(st);
end
它比global更好,因为1.在你不知情的情况下,任何人都无法摧毁你的记录器。
2.甚至没有人知道这个对象,因为它仅限于函数范围
顺便说一下,我不同意global存在性能问题。就软件工程而言,这不是一个好的实践。比在函数中调用持久变量(例如,如果保存并重新加载工作区,则不会保存持久变量)更好的做法是从函数+结构移动到对象:即,你应该研究一下MATLAB的面向对象编程。全局变量不是“邪恶的”。如果你不是一个有经验的程序员,它们可能会产生很多错误,比如重载其他变量等等。另外,我不相信在Matlab中globals的性能会受到影响。如果使用globals让你的生活“非常”简单,那么就使用它们。“不要让它成为一种习惯。”Jorge说,任何程序员,不仅仅是没有经验的程序员。但除此之外,是的。@Jorge-你使用全局变量和将变量传递给方法的标准是什么?你可以看看如何使用全局变量。我只在制作GUI时使用过它,但它在其他环境中可能也很有用。嗨@Andrey,在我看来,持久变量相当于C/C++中的“静态”变量,所以它们只存在于函数范围内,而不存在于函数之间,对吧?谢谢Andrey,你的回答很好。我决定尽我所能远离环球足球队,因为我有良好的练习和表现。谢谢您是指创建一个继承MatlabHandle类的新类吗?