我有几个MATLAB脚本,例如fun1,fun2,...等。它们之间可能存在依赖关系。例如,fun1可以调用fun2,fun2可以调用fun3。
为了删除不必要的变量,我应该在每个函数的头部放上“全部清除”。
function x1 = fun1(input1)
clear all;
...
这是否会导致任何潜在问题,例如删除有用的变量?
答案 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
(或clearvars
或clear variables
)。