Есть ли способ объявить глобальные переменные в MATLAB?
Пожалуйста, не отвечайте:
global x y z;
Потому что я также могу читать файлы справки.
Я объявил глобальную переменную x, а затем сделал что-то вроде этого:
function[x] = test()
global x;
test1();
end
Если функция test1()
определяется как:
function test1()
x = 5;
end
Когда я запускаю test()
, мой вывод x = []
. Есть ли способ заставить его выводить x=5
или что-то, что я определяю x
, чтобы быть в отдельной функции? В C это будет внешняя переменная, и я думал, что сделать ее глобальной переменной должно выполнить именно это...
Вам нужно объявить x
как глобальную переменную в каждой области (т.е. функции/рабочей области), в которой вы хотите, чтобы, Итак, вам нужно написать test1
как:
function test1()
global x;
x = 5;
end
Ссылаясь на ваш комментарий к gnovice, используя глобальную переменную, может быть подход к решению вашей проблемы, но это не часто используется.
Прежде всего убедитесь, что ваши файлы .m
являются функциями, а не скриптами. Скрипты разделяют общую рабочую область, что позволяет легко перезаписывать переменные. Напротив, функции имеют свой собственный охват.
Используйте xUnit, чтобы генерировать повторяемые unit test для ваших функций. Проверяя каждую функцию, участвующую в вашей программе, вы будете отслеживать источник ошибок. Имея ваш unit test на месте, дальнейшие модификации кода, можно легко проверить.
Возможный способ обойти беспорядок global
- назначить переменную как appdata
. Вы можете использовать функции setappdata
и getappdata
для назначения и извлечения appdata
из окна MATLAB. Пока активен сеанс MATLAB, существует окно, обозначенное 0
.
>> setappdata(0,'x',10) % 0 indicates the root MATLAB window
Теперь переменная x не видна ни в какой script или функции, но может быть доступна там, где это необходимо, с помощью getappdata
.
function test
globalX = getappdata(0,'x');
disp(globalX);
end
x =
10
Хорошей новостью является то, что вы можете назначить любой действительный объект MATLAB для appdata
, просто будьте осторожны с именами, используя уникальные имена для полей appdata, например ModelOptimizerOptions
вместо общего x
, y
, чтобы помочь, Это работает на скомпилированных исполняемых файлах и коде, развернутых на сервере производства MATLAB.