2014-07-25 128 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