MATLAB Answers

Can anyone explain how can this happen?

2 views (last 30 days)
Ray Lee
Ray Lee on 4 Apr 2016
Commented: Ray Lee on 12 Oct 2016
function myfunctest
subfcn_set('notafunc');
whos
which notafunc
notafunc
subfcn_set('sin');
whos
which sin
sin
end
function subfcn_set(n)
assignin('caller', n, ['I am ',n]);
end
running myfunctest in matlab gives
>> myfunctest
Name Size Bytes Class Attributes
notafunc 1x13 26 char
notafunc is a variable.
notafunc =
I am notafunc
Name Size Bytes Class Attributes
notafunc 1x13 26 char
sin 1x8 16 char
sin is a variable.
Error using sin
Not enough input arguments.
Error in myfunctest (line 13)
sin
The builtin sin function is called even when a local variable "sin" exists.

  0 Comments

Sign in to comment.

Accepted Answer

Ray Lee
Ray Lee on 4 Apr 2016
I found the doc.
Another potential source of name conflicts occurs when you define a function that calls load or eval (or similar functions) to add variables to the workspace. In some cases, load or eval add variables that have the same names as functions. Unless these variables are in the function workspace before the call to load or eval, the MATLAB parser interprets the variable names as function names.

  2 Comments

Guillaume
Guillaume on 4 Apr 2016
Of course, the advice to avoid creating variables with the same name as a function is not really useful since the names of existing functions depends on which toolbox you have and whichever code is in your path.
If only matlab had a proper namespace system...
Ray Lee
Ray Lee on 12 Oct 2016
+1 for Guillaume's comment

Sign in to comment.

More Answers (1)

Guillaume
Guillaume on 4 Apr 2016
If you put a breakpoint on the sin line and execute it from the debugger the error does not occur, so I suspect it's a 'bug' with the Just-In-Time compiler introduced recently. I assume that when it loads the function, the JIT compiler sees that there is no sin variable created in the function so assumes that sin is a function call.
While it's a bug, it's also another reason for avoiding dynamic variable creation using eval, assignin, and their ilk.

  0 Comments

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by