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)
使用匿名函数,您可以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)