如何编写一个不会抛出“错误数量的参数”错误的函数

时间:2011-06-23 15:44:29

标签: matlab

我正在尝试编写一个可以使用可变数量的参数调用的最小函数,但是如果错误调用则不会抛出错误数量的参数错误。

这是我从哪里开始:

function varargout=fname(varargin)
% FNAME
% Usage: output=fname(input)

% Arguments check
if(nargin~=1 || nargout~=1)
    disp('Function fname requires one input argument');
    disp('and one output argument');
    disp('Try `help fname`');
    varargout(1:nargout)={0};
    return;
end

input=varargin{1};

output=input;

varargout(1)={output};
end

然而,这并不像我希望的那样有效。有没有办法编写一个函数:

  • 永远不会抛出“错误的参数数量”错误(以便其余的执行可以继续)
  • 接受可变数量的输入和输出参数,并在函数
  • 中检查它们
  • (可能更棘手)如果输入/输出参数的数量不正确,不会替换提供的输出参数的值(这样任何错位的调用都不会删除输出参数的先前值)

我对任何建议/其他方法持开放态度。

感谢您的帮助。

更新:感谢@Amro的回答,我想我在这里想念的是要么通过Matlab函数的参考地址调用,要么是在没有返回任何内容的情况下中断函数的方法其余的执行。

2 个答案:

答案 0 :(得分:1)

以下是实现功能的一种方法:

function varargout = fname(input,varargin)
    %# FNAME
    %# Usage: output=fname(input)

    %%# INPUT
    if nargin<1
        varargout(1:nargout) = {[]};
        warning('Not enough input arguments.'), return
    end
    if ~isempty(varargin)
        warning('Too many input arguments.')
    end

    %%# YOUR CODE: manipulate input, and compute output
    output = input;

    %%# OUTPUT
    varargout{1} = output;
    if nargout>1
        warning('Too many output arguments.')
        varargout(2:nargout) = {[]};
    end
end

显然,您可以根据自己的喜好自定义警告信息......

此外,如果您希望自己的功能只是打印邮件而不是发出警告,请使用简单的WARNING函数调用替换所有DISP次来电。

函数调用示例:

fname()
fname(1)
fname(1,2)
x = fname()
x = fname(1)
x = fname(1,2)
[x,y] = fname()
[x,y] = fname(1)
[x,y] = fname(1,2)

以上调用按预期执行(在适用时显示警告消息)。但有一点需要注意,在最后三次调用中,如果变量y在调用之前已存在于工作空间中,则会被每个空值y=[]覆盖...

答案 1 :(得分:0)

如果我理解你的问题,那么答案就是否定的。如果调用者调用这样的函数:

[a, b, c] = fname('foo');

然后fname需要返回(至少)三个输出。如果b仅返回一个输出,则无法告诉MATLAB它应该单独cfname