Is there the more elegant way to do this?

1 vue (au cours des 30 derniers jours)
G A
G A le 28 Jan 2014
Modifié(e) : G A le 31 Jan 2014
I would like to call arguments of function from a string or cell array. For example, this code works as I want:
function testarg()
a=1;b=2;c=3;
m='a,b,c';
eval(['myfun(',m,')']);
function myfun(a,b,c)
a
b
c
Is there another way to do this? Say, without using eval ?
  2 commentaires
Jos (10584)
Jos (10584) le 29 Jan 2014
Just a tip: whenever you found yourself using eval, you will be 99.999% sure that there is a way to do it some other way without using eval that is:
  • more efficient
  • less error-prone
  • without hideous side-effects
  • easy to code, read and maintain
  • ...
eval(char('chro''&HB@MCNVHSGNTSDU@K &('+1))
G A
G A le 29 Jan 2014
Modifié(e) : G A le 29 Jan 2014
Thanks, Jos. I knew how 'bad' is eval- this matter was intensively discussed here by the community. I just wanted to demonstrate my purpose - it was my desperate try to achieve what I want.:)

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 28 Jan 2014
function myfun(varargin)
varargin{:}
  17 commentaires
Matt J
Matt J le 31 Jan 2014
Modifié(e) : Matt J le 31 Jan 2014
It sounds like you should be assigning your data to struct fields, rather than to individual variables.
S.a=1;
S.b=2;
S.c=3;
Now everything is conveniently bundled in S and you can pass that around to functions as a single argument.
G A
G A le 31 Jan 2014
Modifié(e) : G A le 31 Jan 2014
Thanks, Matt! Now I can rename all my variables myname to S.myname and use them as before within my program and pass to functions as single argument S. Previous solution - to use variables as C{1}, C{2} is not convenient - without names. Originally, I thought there could be a way to pass the names as 'a', 'b', which I could bundle as C={'a','b'}...

Connectez-vous pour commenter.

Plus de réponses (1)

Amit
Amit le 28 Jan 2014
function testarg()
a=1;b=2;c=3;
abc(a,b,c)
function abc(a,b,c)
a
b
c
This wil ldo just fine.
  4 commentaires
Amit
Amit le 28 Jan 2014
See MAtt's solution. That will do it.
G A
G A le 28 Jan 2014
Thank you, Amit!

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by