首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何声明变量免疫清除所有?

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

Stack Overflow用户
提问于 2015-04-02 22:32:35
回答 3查看 2.8K关注 0票数 9

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

编辑:让我更充分地解释一下我的问题,我本来应该这么做的,对此我很抱歉。

我必须使用一些“黑匣子”中间代码(其中一些可能是mex文件)运行一些例程。假设我不能深入研究这些代码,那就太好了。我可以改变其中的一些,但这将是昂贵的;例如,我不知道所有的事情都发生在哪里。我知道我可能要求太多,但你永远不会知道。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-02 22:41:17

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

当您直接使用命令窗口或编写快速脚本时,clear all确实是一种方便。它所做的不仅仅是明确的变量。 --它不能代替理解代码的工作方式或使用函数限制变量范围。如果您有一个不再使用的大型数组,您可以显式地告诉Matlab清除它以节省内存。我敢打赌,你真正想要做的事情可以通过重新思考代码的结构来解决。

票数 5
EN

Stack Overflow用户

发布于 2015-04-02 22:51:39

与其保护变量,不如考虑使用带有清空标志的-except。无论如何,应避免,但您确实需要清除ALL

clearvars -except v1 v2 ...清除除-except之后指定的变量以外的所有变量。

这个答案/问题可以给你更多的灵感。

使用:

代码语言:javascript
复制
a = 1;
b = 2;
c = 3;

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

代码语言:javascript
复制
clearvars -except a b

who将返回:

代码语言:javascript
复制
Your variables are:

a  b  
票数 11
EN

Stack Overflow用户

发布于 2015-04-03 00:32:19

首先,您应该尽可能地使用局部变量。如果有人清除了基本工作区,那么这些变量并不重要:

代码语言:javascript
复制
function yourcode()
x=1
evilblackbox()
%x is still here
disp(x)
end


function evilblackbox()
clear all
end

有一个丑陋的解决办法,但我真的建议不要使用它。当您在错误的位置退出调试器时,您将得到需要重新启动matlab的代码,它会抛出异常或类似的愚蠢内容。

代码语言:javascript
复制
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')读取变量

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29423576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档