matlab,循环执行后自动删除索引变量

Posted

技术标签:

【中文标题】matlab,循环执行后自动删除索引变量【英文标题】:Matlab, automatically delete the index variable after the execution of a loop 【发布时间】:2012-04-08 16:30:11 【问题描述】:

在 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

我知道这更像是一个美学问题而不是一个错误,但为了更容易理解我的程序的结果,我希望这些“临时”变量在我退出它们的上下文时消失。

到目前为止,我只能通过重用这些临时变量来减少它们的数量。

编辑:

似乎没有真正的解决方案可以自动删除那些“临时”变量。 避免这些变量的最接近的方法是:

避免循环

在函数中创建循环,函数的变量是本地的,不会进入工作区。

【问题讨论】:

无关:我建议使用ii 作为索引变量以避免破坏i(虚数单位)。 @nibot: +1,即使你也可以养成将虚数单位写成1i 的习惯(注意缺少的空格),如果你使用它比循环变量少得多.. . 是的,没错;我最近才知道 1i。 【参考方案1】:

如果你真的想确保你的一些变量的范围有限,并且你想避免调用clear,你可以使用nested functions。请注意,这可能对可读性没有帮助,而且它更多键入而不是调用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

【讨论】:

您也可以使用assignin('base', 'abc', abc) 在主工作区中分配一个变量。【参考方案2】:

看!没有循环,没有迭代变量!

fprintf('value = %i\n', List)

而且,虽然我在这里,但我不同意您的 i 是一个临时变量;您已将其放在工作区中,因此它本质上是全局的。如果您不希望它“污染”工作空间,请将其放在另一个上下文中(例如,在函数内部)。

是的,我知道 Matlab 有一个全局变量的概念,它与工作区变量略有不同,但在这里不太相关。

【讨论】:

谢谢,我从来没想过要这样写 fprintf。有没有办法(不使用函数)使用变量而不将其放入工作区? @olchauvin:不是真的。在跟踪错误等时,它有时会很有用。 好的,这适用于这个特定的例子。一般来说,答案是:不,这是不可能的? @Bernhard:看看我们目前得到的答案,似乎除了创建一个函数并在其中运行循环之外,这是不可能的。我还没有找到像我们在 C 中那样(将 放在代码的一部分周围)来为变量创建上下文的东西。

以上是关于matlab,循环执行后自动删除索引变量的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch生命周期ILM若干时间后自动删除索引index

Elasticsearch生命周期ILM若干时间后自动删除索引index

oracle索引

SQLite):删除行后自动更新两个表中的索引

在 MongoDB 中,如果删除了集合,索引也会自动删除吗?

谈谈数据库运维自动化