我正在尝试编写一个可以使用可变数量的参数调用的最小函数,但是如果错误调用则不会抛出错误数量的参数错误。
这是我从哪里开始:
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函数的参考地址调用,要么是在没有返回任何内容的情况下中断函数的方法其余的执行。
答案 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它应该单独c
和fname
。