我刚刚发现(使我惊讶的是)调用以下函数

function foo()
if false
   fprintf = 1;
else
  % do nothing
end
fprintf('test')

给出和错误Undefined function or variable "fprintf"我的结论是,变量的范围是在运行前确定的(在我对计算机语言解释,特别是Matlab的理解有限的情况下)有人能给我一些背景资料吗?
编辑
另外一件有趣的事我忘了在上面提到
function foo()
if false
   fprintf = 1;
else
  % do nothing
end
clear('fprintf')
fprintf('test')

产生Reference to a cleared variable fprintf

最佳答案

MATLAB会在函数运行之前对其进行解析例如,它查找变量名,而不考虑激活(或不激活)这些变量的分支也就是说,作用域不是在运行时确定的。
附录:我不推荐这么做,但我见过很多人用MATLAB做我不推荐的事情但是考虑一下如果有人定义自己的函数“false”会发生什么运行前解析器不知道如果调用该函数会发生什么。

关于matlab - Matlab中的范围定义如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13073201/

10-12 04:43