Is there the more elegant way to do this?

1 visualizzazione (ultimi 30 giorni)
G A
G A il 28 Gen 2014
Modificato: G A il 31 Gen 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 Commenti
Jos (10584)
Jos (10584) il 29 Gen 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 il 29 Gen 2014
Modificato: G A il 29 Gen 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.:)

Accedi per commentare.

Risposta accettata

Matt J
Matt J il 28 Gen 2014
function myfun(varargin)
varargin{:}
  17 Commenti
Matt J
Matt J il 31 Gen 2014
Modificato: Matt J il 31 Gen 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 il 31 Gen 2014
Modificato: G A il 31 Gen 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'}...

Accedi per commentare.

Più risposte (1)

Amit
Amit il 28 Gen 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 Commenti
Amit
Amit il 28 Gen 2014
See MAtt's solution. That will do it.
G A
G A il 28 Gen 2014
Thank you, Amit!

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by