2014-07-25 161 views
-3

我有一段代碼在幾個例程中被重複,但是我無法做出它的功能,因爲它應該改變varargin的輸入。所以解決方案似乎將這段代碼放在一個m文件中,並在調用例程中提及該名稱。當我將代碼移動到一個文件並調用它時,所有變量都與代碼體完全一樣,但是在腳本返回錯誤後調用函數會返回錯誤:「Io many output arguments」when I把腳本放在正文中,這個錯誤不再顯示了!腳本導致錯誤

代碼:

function varargout=batchMean(@func,adrs,varargin) 
% code I want to move to script file 
grd=find(strcmp(varargin,'grid')); 
grdfl=find(strcmp(varargin,'gridFile')); 
if grd 
    % If grid is provided in the arguments 
    grid=varargin{grd+1}; 
    varargin(grd:grd+1)=[]; 
elseif grdfl 
    grdFile=cellstr(ls([adrs varargin{grdfl+1} '*'])); 
    varargin(grdfl:grdfl+1)=[]; 
    if isempty(grdFile) 
     error('Hall_lab:batchAV:argin', ... 
       'Grid file mentioned in input could not be found'); 
    end 
    [grid,err]=matRead([adrs grdFile{1}]); 
    if err 
     error('Hall_lab:batchAV:grid', ... 
      'Could not read grid file'); 
    end 
else 
    % Reading grid file 
    grdFile=cellstr(ls([adrs '*Grd.mat'])); 
    if isempty(grdFile) 
     grdFile=cellstr(ls([adrs '*grd.mat'])); 
    end 
    if length(grdFile)>1 
     error('Hall_lab:batchAV:fileSet', ... 
      'There is more than one file for grid'); 
    elseif isempty(grdFile{:}); 
     error('Hall_lab:batchAV:fileSet', ... 
      'There is no file for grid'); 
    end 
    [grid,err]=matRead([adrs grdFile{:}]); 
    if err 
     error('Hall_lab:batchAV:grid', ... 
      'Could not read grid file'); 
    end 
    files=setdiff(files,grdFile); 
end 
% end of code I want to move to script file 
% calling the function 
[varargout{1:outNums}]=func(grid,data,inf,varargin{:}); 

% actual function being called 
function [ave]=meanPIV(~,data,~) 
ave=mean(data,ndims(data)); 
end 
+0

你的代碼片段不是很清楚..什麼是func?什麼是meanpiv?你在哪裏使用batchmean? – lib

+0

第一:如果你不理解它,你最好通過而不是downvoting。 1. func是一個函數處理函數, 2. meanPIV只是一個函數,如CLEARLY在代碼的末尾定義的。 3.你的問題與問題無關。 – anishtain4

回答

0

看來batchmeans沒有輸出。您正在使用varargout,但您從未設置它(請參閱http://www.mathworks.com/help/matlab/ref/varargout.html的示例)。你爲什麼要修改varargin?也許你的功能應該只是

[grid,err] = batchMean(func,adrs,varargin) 
+0

代碼沒有完全包含,因爲它很長,代碼的其餘部分不會導致問題。我沒有使用varargout的問題。 兩條評論之間的代碼: <%code我要移動到腳本文件> <%end of code我要移動到腳本文件> 顯示爲什麼我要修改varargin? – anishtain4

+0

在matlab中,你不能通過引用傳遞參數(句柄除外),所以當你在函數中時,你不是修改你的輸入,而是它的一個副本 – lib

+0

這就是我在問題中所說的: 「我不能作出它的功能,因爲它應該改變輸入「 – anishtain4