function [ muln, varargout ] = my_mul( varargin )
%MY_MUL This function is used to multiply numbers.
% My_mul function multiplies array of entered numbers, and outputs single
% solution.
% For example: my_mul(12, 2, 3, 5) gives ans = 360
if nargout >=1
disp('Error, wrong number of output arguments');
varargout{1} = 0;
return
end
if nargin <= 1
disp('Error, small number of input argumnets');
return
else
muln = 1;
for i = 1:nargin
muln = muln*varargin{i};
end
end
end
大家好,我只是在为uni工作,并且有一个qiuck问题。 如果使用多个输出调用它,我怎么能让这个函数给出一个错误。(这只是给一个)谢谢!
答案 0 :(得分:1)
在函数定义中,您已定义函数以允许无限数量的输出。关键字varargout
是可变数量输出的占位符。
正如您在问题中所述,您只需要一个可能的输出,在您的情况下看起来是muln
。因此,如果您只是从函数定义中删除varargout
,如果请求的输出太多,MATLAB应该会自动抛出错误
function muln = my_mul(varargin)
如果您执行需要使用varargout
但想要为任何给定方案提供多少输出的约束,您可以检查使用请求的输出参数的数量nargout
然后使用error
函数抛出错误。
if nargout > 4
error('my_mul:TooManyOutputs', 'Too many outputs requested');
end
答案 1 :(得分:0)
我的意见是,如果预期返回值,则函数需要抛出。否则调用者(调用此函数的函数)将期望一切正常。请注意,disp('Error')
向开发人员提供信息,但它不会向程序提供有关发生情况的任何指示。更重要的是,该信息不会指示错误发生的位置。这可能会迫使开发人员进行大量调试以找到错误,这是完全没必要的。
只有在需要不同数量的输出参数的情况下才应使用变量输出参数。一个例子是一些自定义的绘图功能
function varargout = myplot(varargin)
filename = '';
idx = find(strcmp(varargin,'filename'));
if (~isempty(idx) && length(varargin)<idx+1 && ~ischar(varargin{idx+1}))
error('filename property must be followed by a directory');
elseif(~isempty(idx))
filename = varargin{idx+1};
varargin([idx,idx+1]) = [];
end
h = plot(varargin{:});
varagout{1} = h;
if (~isempty(idx))
save(filename, h);
end
varagout{2} = filename;
此函数用作plot
,除非在指定文件名的情况下将图形保存到文件中。如果开发人员需要句柄,它将被返回,如果开发人员想要保存目录,也可以返回它。但这些论点都不是必要的。开发人员可能希望将此函数用作标准绘图函数,这意味着用户可能希望将myplot
称为myplot(x,y);
而不返回值。另请注意,即使未指定'filename'
,该函数仍可返回2个输出。第二个输出可能是一个空的char数组,但调用者的两个输出永远不会导致崩溃。
另请注意,不需要进一步的错误处理。唯一未经检查的崩溃位于plot
和save
。对于不同的用户来说,如何处理这个问题可能会有所不同,这意味着让用户捕获错误并处理错误是合理的(正如他在保存或绘图时会抛出的那样)。
除此之外,您可能还需要进行检查,以便输出变量的数量在正确的范围内(在这种情况下为0,1或2个输出)。