относительно использования "очистить все";в функциях - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть несколько сценариев MATLAB, например, fun1, fun2, ... и т. Д. Между ними могут быть отношения зависимости. Например, fun1 может вызывать fun2, а fun2 может вызывать fun3.

Чтобы удалить ненужные переменные, я должен поставить «очистить все» в начале каждой функции.

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

Приведет ли это к потенциальной проблеме, такой как удаление полезных переменных?

Ответы [ 4 ]

5 голосов
/ 18 ноября 2011

Все clear all будет делать в этом контексте, чтобы удалить ваши входные переменные. Когда вы находитесь внутри функции, единственные переменные, которые видит функция, это переменные, переданные в функцию. Итак, вы обнаружите, что это не особенно полезная модель.

1 голос
/ 18 ноября 2011

В нескольких ответах до сих пор объяснялось, что использование clear all в начале функции не является полезным делом, поскольку оно очистит входные переменные.

Я бы просто добавил, что clear all часто неправильно используется даже в сценариях. clear all делает больше, чем просто очищает все переменные из текущего рабочего пространства; он также удаляет все функции, MEX-файлы и любые импортированные классы Java из памяти (поэтому многие вещи впоследствии будут выполняться медленнее, если их потребуется перезагрузить), повторно инициализирует постоянные переменные и удаляет все точки отладки.

Если все, что вы хотите сделать, это очистить переменные, просто используйте clear (или clearvars или clear variables).

1 голос
/ 18 ноября 2011

Нет, нет, 1000 раз нет.

Декларация function даст вам чистое рабочее пространство.Когда функция завершается, рабочее пространство (и все переменные) будут очищены, за исключением глобальных и постоянных.

Даже в сценариях я не рекомендую использовать неразборчивые операторы clear all.Если вам нужна эта возможность, ключевое слово function в начале файла служит для очистки вашего рабочего пространства, не разрушая ничего, с чем вы можете работать.

1 голос
/ 18 ноября 2011

Предполагая, что fun1 и т. Д. Являются типичными функциями (например, не вложенные функции или что-либо еще), каждая функция получает свое собственное рабочее пространство . Единственные переменные, которые у вас будут в этом новом рабочем пространстве функции, - это входные переменные, поэтому выполнение clear all в качестве первого вызова функции очистит входные переменные. Ваша функция не сможет работать с входами.

Если у вас есть вложенная функция, эта вложенная функция будет находиться в том же рабочем пространстве, что и родительская функция, поэтому clear all также уничтожит родительские переменные.

Как правило, только сценарии должны начинаться с clear all, если вы хотите очистить базовое рабочее пространство перед запуском сценария.

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