I just discovered (to my surprise) that calling the following function
function foo()
if false
fprintf = 1;
else
% do nothing
end
fprintf('test')
gives and error Undefined function or variable "fprintf". My conclusion is that the scope of variables is determined before runtime (in my limited understanding how interpretation of computer languages and specifically Matlab works). Can anyone give me some background information on this?
Edit
Another interesting thing I forgot to mention above is that
function foo()
if false
fprintf = 1;
else
% do nothing
end
clear('fprintf')
fprintf('test')
produces Reference to a cleared variable fprintf.
MATLAB parses the function before it’s ever run. It looks for variable names, for instance, regardless of the branching that activates (or doesn’t activate) those variables. That is, scope is not determined at runtime.
ADDENDUM: I wouldn’t recommend doing this, but I’ve seen a lot of people doing things with MATLAB that I wouldn’t recommend. But… consider what would happen if someone were to define their own function called “false”. The pre-runtime parser couldn’t know what would happen if that function were called.