是否有声明变量免疫以清除MatLab中的所有变量?我想到的一个解决方案是保存变量,并在需要时重新打开它们。有人能想到一个更优雅的解决方案吗?
编辑:让我更充分地解释一下我的问题,我本来应该这么做的,对此我很抱歉。
我必须使用一些“黑匣子”中间代码(其中一些可能是mex文件)运行一些例程。假设我不能深入研究这些代码,那就太好了。我可以改变其中的一些,但这将是昂贵的;例如,我不知道所有的事情都发生在哪里。我知道我可能要求太多,但你永远不会知道。
发布于 2015-04-02 22:41:17
您不能保护单个变量,但是可以使用mlock来防止M文件函数或mex函数被清除,以及在其中定义的任何persistent变量。
当您直接使用命令窗口或编写快速脚本时,clear all确实是一种方便。它所做的不仅仅是明确的变量。 --它不能代替理解代码的工作方式或使用函数限制变量范围。如果您有一个不再使用的大型数组,您可以显式地告诉Matlab清除它以节省内存。我敢打赌,你真正想要做的事情可以通过重新思考代码的结构来解决。
发布于 2015-04-02 22:51:39
发布于 2015-04-03 00:32:19
首先,您应该尽可能地使用局部变量。如果有人清除了基本工作区,那么这些变量并不重要:
function yourcode()
x=1
evilblackbox()
%x is still here
disp(x)
end
function evilblackbox()
clear all
end有一个丑陋的解决办法,但我真的建议不要使用它。当您在错误的位置退出调试器时,您将得到需要重新启动matlab的代码,它会抛出异常或类似的愚蠢内容。
function r=crcontainer(field,data)
persistent X
mlock
if exist('data','var')
X.(field)=data;
end
r=X.(field);
end若要将变量放入其中,请使用crcontainer('name',3),使用crcontainer('name')读取变量
https://stackoverflow.com/questions/29423576
复制相似问题