Executing eval in function handle ?
Mostrar comentarios más antiguos
I have the following code which does not work and I don't understand why:
foo='name'
name='C23';
handle=@(var) eval(var)
handle(foo)
I get the following error:
Error using eval
Undefined function or variable 'name'.
Error in @(var)eval(var)
Here,
handle(foo)
should return
'C23'
Can someone tell me what I did wrong and how to make this work?
Thanks in advance
3 comentarios
Rik
el 18 de Mzo. de 2018
I can't see any direct reason why this doesn't work, however, why do you want to do this? There is almost always a very good replacement for eval. Usually eval solves problems caused by bad data management. Instead of learning how a mop works, it's usually beter to close the faucet.
In other words: what is your goal? Maybe we can help you solve that instead of this question.
Stephen23
el 19 de Mzo. de 2018
"I could not think of any other way to do this"
Using eval is rarely the solution that beginners think it is: it will just make your code slow, complex, and (as you are finding out now) much buggier and harder to debug. Read this to know more:
Respuesta aceptada
Más respuestas (1)
Greg
el 19 de Mzo. de 2018
1 voto
Most importantly! respond to Rik's comment above. The use of eval is very nearly always a horrible idea.
However, to your question: it does not work because the scope of name is where the anonymous function is defined. When executing the anonymous function, name is out of scope in that workspace.
1 comentario
Greg
el 19 de Mzo. de 2018
I hesitate to mention it could work if you used evalin('caller',...); but again, bad idea!
Categorías
Más información sobre Variables en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!