Подтвердить что ты не робот

Объявление глобальной переменной в MATLAB

Есть ли способ объявить глобальные переменные в 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 это будет внешняя переменная, и я думал, что сделать ее глобальной переменной должно выполнить именно это...

4b9b3361

Ответ 1

Вам нужно объявить x как глобальную переменную в каждой области (т.е. функции/рабочей области), в которой вы хотите, чтобы, Итак, вам нужно написать test1 как:

function test1()
  global x;
  x = 5;
end

Ответ 2

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

Прежде всего убедитесь, что ваши файлы .m являются функциями, а не скриптами. Скрипты разделяют общую рабочую область, что позволяет легко перезаписывать переменные. Напротив, функции имеют свой собственный охват.

Используйте xUnit, чтобы генерировать повторяемые unit test для ваших функций. Проверяя каждую функцию, участвующую в вашей программе, вы будете отслеживать источник ошибок. Имея ваш unit test на месте, дальнейшие модификации кода, можно легко проверить.

Ответ 3

Возможный способ обойти беспорядок 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.