Объявление глобальной переменной в MATLAB - PullRequest
35 голосов
/ 06 февраля 2011

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

Ответы [ 3 ]

46 голосов
/ 06 февраля 2011

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

function test1()
  global x;
  x = 5;
end
4 голосов
/ 06 февраля 2011

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

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

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

1 голос
/ 19 августа 2016

Возможный способ обойти беспорядок global - назначить переменную как appdata.Вы можете использовать функции setappdata и getappdata для назначения и извлечения appdata из окна MATLAB.Пока сеанс MATLAB активен, существует окно, обозначенное 0.

>> setappdata(0,'x',10)  % 0 indicates the root MATLAB window

. Теперь переменная x не видна ни одному скрипту или функции, но может быть доступна там, где это необходимо, используя getappdata.

function test
    globalX = getappdata(0,'x');
    disp(globalX);
end

x =
    10

Хорошей новостью является то, что вы можете назначить любой действительный объект MATLAB для appdata, просто будьте осторожны с именами, используя уникальные имена для полей appdata, таких как ModelOptimizerOptions вместо универсального * 1016.*, y поможет.Это работает и для скомпилированных исполняемых файлов и кода, развернутых на производственном сервере MATLAB.

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