我global在一个if命令中使用(在Matlab中)一个语句,所以我只有在真正需要时才将全局变量导入本地命名空间.
代码分析器警告我" global除非它是函数中的顶级语句,否则效率可能非常低".考虑到可能的内部实现,我发现这个限制非常奇怪和不寻常.我在考虑两种可能性:
这个警告的真正含义是" global它本身效率很低,所以不要在循环中使用它".特别是,在if中使用它,就像我正在做的那样,非常安全,而且警告发出错误(措辞不当)
警告是正确的; Matlab在后台使用了一些非常不寻常的变量加载机制,因此在if语句中导入全局变量要慢得多.在这种情况下,我想要提示或指示这些东西是如何工作的,因为我感兴趣,如果我想在将来编写有效的代码,这似乎很重要.
这两种解释中哪一项是正确的?(或者两者都不是?)
提前致谢.
编辑:更清楚:我知道这global很慢(显然我不能避免使用它,因为它是我正在使用的旧库的设计决定); 我问的是为什么Matlab代码分析器会抱怨
if(foo==bar)
GLOBAL baz
baz=1;
else
do_other_stuff;
end
Run Code Online (Sandbox Code Playgroud)
但不是
GLOBAL baz
if(foo==bar)
baz=1;
else
do_other_stuff;
end
Run Code Online (Sandbox Code Playgroud)
我发现很难想象第一个应该比第二个慢的原因.
在parfor循环内部,我试图调用一个global无法访问的函数.
功能
function a = getA()
global OPTIONS;
a=OPTIONS.PROBLEM.A;
end
Run Code Online (Sandbox Code Playgroud)
循环:
parfor i=1:3
b=getA();
end
Run Code Online (Sandbox Code Playgroud)
错误:
Error using parallel_function (line 589)
Attempt to reference field of non-structure array.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?