Can anyone explain how can this happen?

1 visualización (últimos 30 días)
Ray Lee
Ray Lee el 4 de Abr. de 2016
Comentada: Ray Lee el 12 de Oct. de 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.

Respuesta aceptada

Ray Lee
Ray Lee el 4 de Abr. de 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 comentarios
Guillaume
Guillaume el 4 de Abr. de 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 el 12 de Oct. de 2016
+1 for Guillaume's comment

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 4 de Abr. de 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.

Categorías

Más información sobre Antennas, Microphones, and Sonar Transducers en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by