В Matlab при объявлении переменной как глобальной и ее сохранения с помощью команды save() переменная также является глобальной после загрузки .mat-файла в новый сеанс. Следующий код показывает, такое поведение:Сохранение глобальных переменных в Matlab
В начале, у меня нет никаких переменных:
>> who
>> who global
Тогда я создал глобальную переменную и сохранить его:
>> global settings
>> settings.test = 1;
>> who
Your variables are:
settings
>> who global
Your variables are:
settings
>> save('test.mat','settings');
После этого я очистить рабочее пространство и глобальные переменные (или начать новый сеанс Matlab)
>> clear
>> clearvars -global
>> who
>> who global
Когда я загружаю .mat file, переменная снова будет помечена как глобальная, даже если я не укажу ее сейчас.
>> load test.mat
>> who
Your variables are:
settings
>> who global
Your variables are:
settings
>> clear
>> who
>> who global
Your variables are:
settings
Есть ли способ предотвратить такое поведение?
Мне кажется, что «глобальный» флаг сохраняется с переменной. Это действительно полезно? Предположим, что мы отправили мне mat-файл с данными, где переменные объявлены глобальными. Даже при загрузке этого файла в функции он будет распространять данные в моем полном сеансе. Для меня это делает код Matlab очень уязвимым.
Заранее спасибо.
Как насчет 'settings = load test.mat'? Это все еще «глобальное»? – Dan
Нет, в этом случае настройки не будут глобальными, но это приведет к: settings.settings.test. – Nemesis
Это считается гораздо лучшей практикой, хотя, поскольку он намного легче увидеть, откуда загружаются переменные, ... http://blogs.mathworks.com/loren/2012/01/13/best-practices-for-programming- matlab/вы делаете числа 7 и 9 в этом списке плохой практики:/ – Dan