Matlab 函数处理可变和未知数量的输出

Matlab functions handles and variable and unknown number of outputs

使用匿名函数,您可以return 任意数量的输出。我需要的是能够使用仿函数(匿名函数作为其他函数的参数),同时不知道我会得到多少输出。

这是为了通过在许多函数中重复使用的 while 循环中注入函数调用来避免代码重复。

示例:

function y = foo( x )  
    y = x;
end

function [y1, y2] = goo( x1, x2 )  
    y1 = x1;
    y2 = x2;
end

function [ varargout ] = yolo( functor, varargin )  
    varargout = functor(varargin{:});    
end

我希望能够打电话给:

y = yolo(@foo, 2)
[y1, y2] = yolo(@goo, 3, 4);

有什么办法可以实现吗? 谢谢

无法获取匿名函数(内联函数的函数句柄)的输出数,因为输出始终为 varargout,因此 nargout 始终为 return -1

myfunc = @(x, y) x + y;
nargout(myfunc)
%   -1

但是,您似乎没有匿名函数,而只是普通函数的函数句柄,这些函数在 .m 文件中定义并且具有明确数量的输出参数。在这种情况下,您可以将 nargout{:} 索引结合使用,以使用所有输出参数填充 varargout

function y = foo(x)
    y = x;
end

function [y1, y2] = goo(x1, x2)
    y1 = x1;
    y2 = x2;
end

function varargout = yolo(functor, varargin)
    [varargout{1:nargout(functor)}] = functor(varargin{:});
end

y = yolo(@foo, 2)
[y1, y2] = yolo(@goo, 3, 4)