我刚刚发现(令我惊讶的是)调用以下函数
function foo()
if false
fprintf = 1;
else
% do nothing
end
fprintf('test')
给出和错误Undefined function or variable "fprintf"
。我的结论是,变量的范围是在运行时之前确定的(根据我对计算机语言特别是 Matlab 的解释如何工作的有限理解)。谁能给我一些这方面的背景信息?
Edit
我上面忘记提到的另一件有趣的事情是
function foo()
if false
fprintf = 1;
else
% do nothing
end
clear('fprintf')
fprintf('test')
产生Reference to a cleared variable fprintf
.
MATLAB 在函数运行之前对其进行解析。例如,它会查找变量名称,而不管激活(或不激活)这些变量的分支如何。也就是说,范围不是在运行时确定的。
附录:我不建议这样做,但我看到很多人用 MATLAB 做我不建议的事情。但是......考虑一下如果有人定义自己的名为“false”的函数会发生什么。预运行时解析器无法知道如果调用该函数会发生什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)