我在matlab中有一个函数:
function output = myfunc(a,b,c,d,e)
%a and b are mandetory
%c d and e are optional
end
如果用户为e而不是c和d提供了可选的arg,我将如何处理输入?
nargin只给出了参数的数量。会存在最好的方式吗?
答案 0 :(得分:2)
只需使用 nargin 即可。它会告诉你有多少参数存在。仅当您拥有变量个参数时才使用varargin,即您没有参数数量限制,或者您希望以索引方式访问参数。我认为这不是你的情况,所以一个解决方案可能看起来像这样。
function output = myfunc(a,b,c,d,e)
%a and b are mandetory
%c d and e are optional
if nargin < 3 || isempty(c)
c = <default value for c>
end
if nargin < 4 || isempty(d)
d = <default value for d>
end
if nargin < 5 || isempty(e)
e = <default value for e>
end
<now do dome calculation using a to e>
<If a or b is accessed here, but not provded by the caller an error is generated by MATLAB>
如果用户不想为c或d提供值但提供e,则他必须传递[],例如 func(a,b,c,[],e),省略d。
或者你可以使用
if nargin == 5
<use a b c d and e>
elseif nargin == 2
<use a and b>
else
error('two or five arguments required');
end
检查是否存在所有参数e。但这需要2或5个参数。
答案 1 :(得分:1)
您可以将c
,d
和e
定义为可选,然后根据位置分配值。如果他们想要e
而不是c
,则需要空输入。例如:
function output = myfunc( a, b, varargin )
optionals = {0,0,0}; % placeholder for c d e with default values
numInputs = nargin - 2; % a and b are required
inputVar = 1;
while numInputs > 0
if ~isempty(varargin{inputVar})
optionals{inputVar} = varargin{inputVar};
end
inputVar = inputVar + 1;
numInputs = numInputs - 1;
end
c = optionals{1};
d = optionals{2};
e = optionals{3};
output = a + b + c + d + e;
这只会将所有内容添加到一起。有很多错误检查需要发生。更好的方法可能是inputParser
。这会进行配对输入和检查。见Input Parser help