如何声明变量免疫清除所有?

时间:2015-04-02 22:32:36

标签: matlab clear

在MatLab中是否有声明变量免于清除所有变量? 我想到的一个解决方案是保存变量并在需要时重新打开它们。 谁能想到更优雅的解决方案?

编辑:让我更彻底地解释我的问题,我本来应该做的事情;对不起。

我必须使用一些"黑盒"来运行一些例程。中间代码(其中一些可能是mex文件)。假设我不能详述这些代码,这将是一件好事。我可以改变其中的一些,但这样做会很昂贵;例如,我不知道清楚的一切发生在哪里。我知道我可能会要求太多,但你永远不会知道。

3 个答案:

答案 0 :(得分:9)

请考虑将clearvars-except标志一起使用,而不是保护变量。 The use of clear all should be avoided无论如何,除非你真的需要清除所有

  

clearvars -except v1 v2 ...   清除除-except

后面指定的所有变量

This answer/question可以为您提供进一步的灵感。


<强>用法:

a = 1;
b = 2;
c = 3;

vars2keep = {'a','b'}
clearvars('-except',vars2keep{:})

clearvars -except a b

who将返回:

Your variables are:

a  b  

答案 1 :(得分:5)

您无法保护单个变量,但您可以使用mlock来阻止清除M文件函数或mex函数,以及在其中定义的任何persistent变量。

当直接使用命令窗口或编写快速脚本时,

clear all真的很方便。 It does a lot more than just clear variables.它不能代替理解代码的工作方式或使用函数来限制变量范围。如果您有一个不再使用的大型数组,您可以明确告诉Matlab清除它以节省内存。我可以通过重新思考代码结构来解决您实际尝试做的事情。

答案 2 :(得分:2)

首先,您应该尽可能使用局部变量。如果有人清除基础工作区,则这些变量无关紧要:

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')

进行阅读