Matlab, автоматически удаляет индексную переменную после выполнения цикла - PullRequest
8 голосов
/ 24 марта 2012

В 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

Я знаю, что это скорее эстетическая проблема, чемошибка, но для более легкого понимания результатов моей программы, я бы хотел, чтобы эти «временные» переменные исчезали при выходе из их контекстов.

До сих пор я только смог уменьшить количество этих временныхпеременные путем их повторного использования.

Редактировать:

Кажется, что нет реального решения для автоматического удаления этих "временных" переменных.Ближайшие способы избежать использования этих переменных:

  • Предотвращение циклов

  • Создание циклов в функциях, переменные функций являются локальными ине попадет в рабочее пространство.

Ответы [ 2 ]

6 голосов
/ 24 марта 2012

Если вы ДЕЙСТВИТЕЛЬНО хотите убедиться, что некоторые из ваших переменных имеют ограниченную область действия, и вы хотите избежать вызова 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
5 голосов
/ 24 марта 2012

Смотри!Нет цикла, нет итерационной переменной!

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

И, пока я здесь, я не согласен с тем, что ваша i является временной переменной;вы поместили его в рабочее пространство, чтобы оно было, по сути, глобальным.Поместите его в другой контекст (например, в функцию), если вы не хотите, чтобы он «загрязнил» рабочее пространство.

И да, я знаю, что в Matlab есть концепция глобальных переменных, которая немного отличается от рабочего пространствапеременные, но здесь это не совсем актуально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...