如何找出哪个变量触发了有关全局变量的 Matlab 警告



我在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

它应该显示作为全局变量列出的所有变量。遗憾的是,找到定义该变量的位置并不那么简单。

相关内容

  • 没有找到相关文章

最新更新