Executing eval in function handle ?
Mostra commenti meno recenti
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 Commenti
Rik
il 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
il 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:
Risposta accettata
Più risposte (1)
Greg
il 19 Mar 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 Commento
Greg
il 19 Mar 2018
I hesitate to mention it could work if you used evalin('caller',...); but again, bad idea!
Categorie
Scopri di più su Variables in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!