2016-11-15 154 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