我在Linux上使用Matlab R2018a。我收到警告消息:
"警告:局部变量的值可能已更改以匹配全局变量。MATLAB 的未来版本将要求您在使用变量之前将变量声明为全局变量。
警告伴随着文件名和行号,但该行上有几个变量,所以我想知道消息指的是哪一个。
有没有办法找出警告抱怨的变量?
有没有办法将警告变成错误?也许这会更容易解决问题,而不仅仅是容忍它。
此错误是在将变量声明为全局变量的行上触发的,但该变量已用作局部变量:
baz = 3;
% ... much later...
global foo bar baz
若要找出已定义哪些变量,可以在global
行设置断点,并查看当时存在哪些变量。
您还可以在此行之前添加who
命令,并在生成警告之前观察程序的控制台输出。
找到触发错误的变量名称后,可以使用该名称重命名局部变量,使全局变量保持不变。
向 @flawr 和 @SardarUsama 大喊大叫,他们在 MATLAB 聊天中帮助弄清楚了这条警告消息的含义。
下面是原始答案的一部分,它显示了确定变量是否是全局变量的方法。
正如@Durkee建议的那样,whos global
将列出全局变量。您可以以编程方式使用它来测试"全局性":
~isempty(whos('global','varname'))
(请注意,isglobal
很久以前曾经是 MATLAB 中的一个函数,但后来被删除了(。
尝试在代码中的某处键入whos global
global global_var
global_var = 1;
clear global_var
whos global
它应该显示作为全局变量列出的所有变量。遗憾的是,找到定义该变量的位置并不那么简单。