2016-11-15 148 views
2

使用匿名函数,您可以返回任意数量的输出。我需要的是能够使用函数(匿名函数作为其他函数的参数),而不知道我会得到多少输出。Matlab函数句柄和可变和未知数量的输出

这是为了通过在一个while循环中注入函数调用来避免代码重复,而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); 

有什么办法来实现这一目标? 感谢

回答

3

这是不可能获得的匿名函数的输出的数量(函数句柄到内联函数),因为输出始终varargout,因此nargout总是要返回-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) 
+0

谢谢您的回答,我试图寻找使用输出作为参数的数量的方法,但看来这将工作,现在要检查这个权利。 我不知道我可以使用nargout作为函数 – Zangdar