Mes*_*sop 8 matlab for-loop temporary
在Matlab上,当我使用"for ... end"循环时,索引变量在循环完全执行后仍然存在于我的工作区中.我希望它被自动删除,因为它在循环之外不再相关并且它污染了工作空间.
例如,在以下代码中,变量"i"在执行循环后仍然存在.因为它应该是一个局部变量,我希望它能自动删除,而不必我明确地去做.
List = [1 2 3 4] ;
for i = List
fprintf('value = %i\n', i) ;
end
% "i" still exists, while its outside of its context
clear i; % I would like to avoid doing this everytime I exit a for..end
Run Code Online (Sandbox Code Playgroud)
我知道这更像是一个美学问题,而不是一个错误,但为了更容易理解我的程序结果,我希望当我退出它们的上下文时,那些"临时"变量就会消失.
到目前为止,我只能通过重用它们来减少这些临时变量的数量.
编辑:
似乎没有真正的解决方案来自动删除那些"临时"变量.避免使用这些变量的最接近的方法是:
避免循环
在函数中创建循环,函数的变量是本地的,不会进入工作区.
如果您真的想确保某些变量的范围有限,并且您想避免调用clear,则可以使用嵌套函数.请注意,这可能对可读性没有帮助,而且打字比打字更多clear.但是,它确实确保主函数工作空间中的唯一变量是您想要/需要保留的变量.
function doSomething
List = [1 2 3 4] ;
runLoopOnList()
%# some other code here
%# nested functions
function runLoopOnList
%# i, and any other variable defined here
%# will not appear in the workspace
%# in contrast, all variables in the workspace
%# are visible and can be changed by the nested function
%# If a nested function should assign a new important
%# variable in the main workspace, have it return
%# and output.
for i = List
fprintf('value = %i\n', i) ;
end
end %# nested function
end %# main function
Run Code Online (Sandbox Code Playgroud)
看!没有循环,没有迭代变量!
fprintf('value = %i\n', List)
Run Code Online (Sandbox Code Playgroud)
而且,虽然我在这里,但我不同意你i是一个临时变量; 你已经将它放在工作区中,因此它本质上是全局的.如果您不希望它"污染"工作区,请将其置于另一个上下文中(例如,在函数内).
是的,我知道Matlab有一个全局变量的概念,它与工作空间变量略有不同,但它在这里并不十分相关.