Executing eval in function handle ?
Afficher commentaires plus anciens
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 commentaires
Rik
le 18 Mar 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
le 19 Mar 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:
Réponse acceptée
Plus de réponses (1)
Greg
le 19 Mar 2018
1 vote
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 commentaire
Greg
le 19 Mar 2018
I hesitate to mention it could work if you used evalin('caller',...); but again, bad idea!
Catégories
En savoir plus sur Variables dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!