MatLab功能,可变输出

时间:2016-01-21 10:25:09

标签: matlab function

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问题。 如果使用多个输出调用它,我怎么能让这个函数给出一个错误。(这只是给一个)谢谢!

2 个答案:

答案 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数组,但调用者的两个输出永远不会导致崩溃。

另请注意,不需要进一步的错误处理。唯一未经检查的崩溃位于plotsave。对于不同的用户来说,如何处理这个问题可能会有所不同,这意味着让用户捕获错误并处理错误是合理的(正如他在保存或绘图时会抛出的那样)。

除此之外,您可能还需要进行检查,以便输出变量的数量在正确的范围内(在这种情况下为0,1或2个输出)。