Get maximum number of outputs from anonymous function

7 visualizaciones (últimos 30 días)
Luca Amerio
Luca Amerio el 20 de Oct. de 2017
Comentada: Stephen23 el 20 de Oct. de 2017
Hi everybody. I would like to call a function from within another function. The problem is that i don't know a-priori the number of output variable of the function i'm calling. I can evaluate it with nargout, but once i've done it, how can I call the function with that number of outputs?
function varargout = myfunction(fun, varargin)
% Do some stuff here
funName = func2str(fun);
maxnargout = nargout(funName);
[??] = fun(varargin{:})
% Do some stuff here
Using "eval" I could do something like
eval(['[ varargout{1}' sprintf(', varargout{%i}',2:maxnargout ) '] = fun(varargin{:})'])
but it is utterly awful!!!!

Respuesta aceptada

Cam Salzberger
Cam Salzberger el 20 de Oct. de 2017
Hello Luca,
That's a somewhat tricky one, and I agree that going the "eval" route is not the best way. You can get around it using some tricks with cell arrays. Also, I believe that you can use nargout directly on the function handle.
f = @max;
x = rand(3);
results = cell(1, nargout(f));
[results{:}] = f(x);
-Cam
  2 comentarios
Luca Amerio
Luca Amerio el 20 de Oct. de 2017
Wow! It was rather trivial! Didn't think to use the typical [cell{:}] syntax for the output.
Thank you very much
Stephen23
Stephen23 el 20 de Oct. de 2017
@Luca Amerio: you can use comma-separated lists anywhere that you would use a comma-separated list of variables. Very handy!

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 20 de Oct. de 2017
Use the conversion of comma-separated lists to cell array (or structure):
maxnargout = nargout(funName);
out = cell(1, maxnargout);
[out{:}] = fun(varargin{:});
Or if the outputs of fun are meant to go into the varargout of myfunction, then replace out by varargout.

Categorías

Más información sobre Data Type Identification en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by