18

假设您是一些新程序员,并且您正在执行类似...

%...la da da
%...programming away
if such && such
    clear = 1;
else 
    clear = 0;
end 

或者以其他方式,为变量分配clear一个值。

有没有办法“清除” clear

clearvars不起作用。单击工作区变量并手动单击删除确实有效,但我认为这是作弊。

4

4 回答 4

27

这将做到:

builtin('clear','clear')

注意:请记住避免此类操作以保持代码清晰。仅在您要执行的确切操作时才进行覆盖。否则,如果您忘记(或者如果其他人使用您的代码但没有意识到)您已经覆盖了 clear(或任何其他)函数,则可能会导致未来的错误。例如,您可以轻松地命名此变量doClear

于 2013-08-21T14:51:47.090 回答
8

任何名称,甚至builtin可以feval被覆盖。在这种情况下,您可以使用函数句柄来强制 MALTAB 将语句解释为函数调用:

clear = str2func('clear');
clear('clear')

显然,str2func也可以被覆盖!:) 但是,存在一个类似的解决方案(受Loren 的文章启发),它创建了一个单独的 m 文件来做同样的事情:

function clearclear()
    assignin('caller', 'clear', @clear);

在主工作区中调用此函数应该可以让您clear('clear')安全地进行操作。

第二种解决方案利用了 m 文件没有“看到”clear主工作区中的变量这一事实,因此可以clear正确访问函数的实际句柄。

于 2013-08-21T17:30:36.390 回答
1

一种非直观的方式是

clear = rand(1000,500,700);
pack

这会产生以下警告:

警告:变量“clear”不能保存到版本早于 7.3 的 MAT 文件中。要保存此变量,请使用 -v7.3 开关。跳过...

它也遇到了可以分配pack为变量的相同问题。

于 2013-10-07T16:00:34.177 回答
0

有趣的问题!我发现很难找到一种以编程方式执行此操作的方法(除了@TryHard 建议的方法)

这是我想出的,虽然它比clear

!matlab &
exit

请注意,如果您想一次在命令行中键入此内容,则需要在两者之间使用 shift+enter。

于 2013-08-21T15:20:42.190 回答