Hi, I have noticed something strange. It have most likely to do with the fundamental structure of matlab. What I wonder is if there are some known (and expected?) problems with overloading functions with assignin. What I want to do is to create a variable called colorbar. This must then overload the function colorbar.
To avoid all comments: I know that it is normally bad practice to do like this, but I am afraid that the change would be is more or less out of my hands.
To show the problem I have provided 2 examples. The first one works fine:
colorbar = 'none';
The output is none as I want. The second example does not give the expected output:
myVar = 'colorbar';
assignin('caller', myVar, 'none');
the output is an axes handle here. However, if a breakpoint is set at the same line as return (or on the same line as disp as well) and disp(colorbar) is executed in the command window I will once again get the expected output.
This can of course be solved by assigning a value like colorbar = 'none', but what I am interested in knowing is why it does not work with assignin. Is it a bug or is this the expected output?
After some thinking I think that I have found the reason. The guess is that while assignin is evaluated in runtime the decisions whether something is a variable, a function, not defined,... is done by the compiler, there can be a problems here. The compiler will then treat colorbar as a function since it cannot see what will happen inside assignin. If someone want to use assignin to assign a value to a variable, then eval or evalin is required to evaluate the variable as well.
Does this make sense?