【问题标题】:How to remove the variable "clear" in MATLAB如何在 MATLAB 中删除变量“clear”
【发布时间】:2013-08-21 14:46:21
【问题描述】:

假设你是一个新的程序员,你正在做类似的事情......

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

或者以其他方式,为变量clear 赋值。

有没有办法“清除”clear

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

【问题讨论】:

  • 好的,感谢大家让我的代码完全兼容 matlab 语法。哈哈。
  • 您也可以在 Matlab UI 中通过单击删除变量来删除它...
  • 如果您处于 nodesktop 模式,这仍然很有趣。
  • @Frederick 好的,但你为什么要盲目地回滚编辑?例如,我认为标题中的“MATLAB”一词应该大写。我还添加了指向clearvars 的链接和问题的新标签。而sn-p代码又增加了哪些新信息?

标签: matlab


【解决方案1】:

这样就可以了:

builtin('clear','clear')

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

【讨论】:

  • 非常好!一些建议,不要尝试builtin=1,除非您想重新启动 Matlab,否则无法再分配变量。
【解决方案2】:

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

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

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

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

在主工作区调用这个函数应该可以让你安全地做clear('clear')

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

【讨论】:

  • 我认为这是一个更优雅的解决方案,但它不起作用。 (至少在 R2012a 中)。错误:“clear”以前用作变量,与此处用作函数或命令的名称冲突。
  • 实际上你不能给内置变量赋值。你可以用一个函数重载它,但是你真的破坏了一切(甚至是关闭 matab 的十字架!)。 --- 旁注,看来feval('clear') 是cmets 到博客中提到的最简单的解决方案。
  • @DennisJaheruddin feval 方法容易出现同样的问题。顺便说一句,我刚刚创建了两个名为fevalbuiltin 的变量。重载 builtin 似乎确实会破坏一些东西,但它可能的。
  • 有趣,在 2012b 上,只需在一个清晰的工作区中执行 builtin=1 即可为您提供 Index exceeds matrix dimensions,当您键入 who 时,它确实表明内置是一个变量。但是,工作区中没有显示任何内容。
【解决方案3】:

一种不直观的方式是

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

这会产生以下警告:

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

它也有同样的问题,你可以将pack 分配为一个变量。

【讨论】:

  • 我喜欢它。不错的补充。
【解决方案4】:

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

这是我想出的,虽然它比clear 更强大一点:

!matlab &
exit

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

【讨论】:

  • 我认为重启 matlab 也不算数! (如果我也给exit 一个值怎么办...?)
  • @Frederick 然后试试quit。无论如何,在以编程方式解决clear 问题后,您应该能够在新会话中继续工作。
  • 如果第二个会话已经在运行怎么办? It has been mentioned MATLAB 允许您在同一许可下最多同时打开两个会话...
  • @EitanT 在阅读下面的两个 cmets 后,我认为这很好。只要您将其保存在 1 台计算机上并为自己所有。
猜你喜欢
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多