在MatLab中是否有声明变量免于清除所有变量? 我想到的一个解决方案是保存变量并在需要时重新打开它们。 谁能想到更优雅的解决方案?
编辑:让我更彻底地解释我的问题,我本来应该做的事情;对不起。
我必须使用一些"黑盒"来运行一些例程。中间代码(其中一些可能是mex文件)。假设我不能详述这些代码,这将是一件好事。我可以改变其中的一些,但这样做会很昂贵;例如,我不知道清楚的一切发生在哪里。我知道我可能会要求太多,但你永远不会知道。
答案 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')