Как узнать, какая переменная вызывает предупреждение Matlab о глобальных переменных - PullRequest
0 голосов
/ 25 июня 2018

Я работаю с Matlab R2018a в Linux.Я получаю предупреждающее сообщение:

"Предупреждение. Возможно, значение локальных переменных было изменено для соответствия глобальным переменным. В будущих версиях MATLAB потребуется объявить переменную глобальной, прежде чем использовать ее."

Предупреждение сопровождается именем файла и номером строки, но в этой строке есть несколько переменных, поэтому мне интересно, к какой из них относится сообщение.

Есть ли способ узнать, к какой переменной относится предупреждение?

Есть ли способ превратить предупреждение в ошибку?Может быть, это поможет решить проблему, а не просто ее терпеть.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

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

baz = 3;
% ... much later...
global foo bar baz

Чтобы узнать, какая из этих переменных уже была определенаВы можете установить точку останова в строке global и посмотреть, какие переменные существуют в данный момент.

Вы также можете добавить команду who непосредственно перед этой строкой и наблюдать вывод консоли вашей программы.непосредственно перед генерацией предупреждения.

Как только вы нашли имя переменной, которая вызывает ошибку, вы можете переименовать переменную local с этим именем, оставив global переменная без изменений.

Привет @flawr и @SardarUsama, которые помогли выяснить значение этого предупреждения в чате MATLAB .


Ниже приведена часть исходного ответа, которая показывает способ определения глобальности переменных.


Как @ Durkee предложил , whos global выведет глобальный списоквriables.Вы можете использовать это программно для проверки «глобальности»:

~isempty(whos('global','varname'))

(обратите внимание, что isglobal раньше была функцией в MATLAB , но с тех пор была удалена).

0 голосов
/ 25 июня 2018

Попробуйте набрать whos global где-нибудь в своем коде

global global_var
global_var = 1;
clear global_var
whos global

В нем должны отображаться все переменные, перечисленные как глобальные переменные.К сожалению, не так просто найти, где определена эта переменная.

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