关于使用“全部清除”;在功能

时间:2011-11-17 20:59:11

标签: matlab

我有几个MATLAB脚本,例如fun1,fun2,...等。它们之间可能存在依赖关系。例如,fun1可以调用fun2,fun2可以调用fun3。

为了删除不必要的变量,我应该在每个函数的头部放上“全部清除”。

function x1 = fun1(input1)
clear all;
...

这是否会导致任何潜在问题,例如删除有用的变量?

4 个答案:

答案 0 :(得分:5)

所有clear all将在该上下文中执行,即删除输入变量。当您在函数内时,函数看到的唯一变量是传递给函数的变量。所以,你会发现这不是一个特别有用的模式。

答案 1 :(得分:1)

假设fun1等是典型的函数(例如,不是嵌套函数或任何东西),each function gets its own workspace。您在此新函数工作空间中唯一的变量是输入变量 - 因此在函数中第一次调用时执行clear all将清除输入变量。您的功能将无法对输入进行操作。

如果你有一个嵌套函数,那个嵌套函数将与父函数在同一个工作区中 - 所以clear all也会删除父元素的变量。

通常,如果您希望在运行脚本之前清理基本工作区,则只有脚本应该以{{1​​}}开头。

答案 2 :(得分:1)

不,不,不,1000次没有。

function声明将为您提供干净的工作空间。当函数退出时,将清除工作空间(和所有变量),但全局和持久性除外。

即使在脚本中,我也不鼓励使用不加思索的clear all语句。如果您需要该功能,则文件开头的function关键字可用于清理工作区,而不会破坏您可能正在处理的任何其他内容。

答案 3 :(得分:1)

到目前为止,有几个答案解释了在函数开头使用clear all并不是一件有用的事情,因为它会清除输入变量。

我只是补充说,即使在脚本中,clear all也经常被滥用。 clear all不只是清除当前工作空间中的所有变量;它还从内存中删除所有函数,MEX文件和任何导入的Java类(如果需要重新加载,许多事情将随后运行得更慢),重新初始化持久变量,并删除任何调试点。

如果您只想清除变量,只需使用clear(或clearvarsclear variables)。