我的功能的输入数量不确定

时间:2011-03-07 02:36:44

标签: matlab

我最近遇到了一个问题,我应该定义一个输入数量不确定的函数,也就是说,输入的数量可能会因实际情况而异。我应该使用二维数组还是别的?我不知道struct2cell是否有用,以及它是如何工作的。

有没有人知道这样做的最佳方法?

我可能不太清楚,所以如果有任何需要澄清,请告诉我。

由于

2 个答案:

答案 0 :(得分:6)

有几种方法可以解决这个问题:

如果给定参数与上下文无关,则使用可选输入参数,但如果在某些情况下需要额外输入。

function out = myFun(first,second,third,fourth)

%# first is always needed
if nargin < 1 || isempty(first)
error('need nonempty first input')
end

%# second is optional
if nargin < 2 || isempty(second)
second = defaultValueForSecondWhichCanBeEmpty;
end

%# etc

您可以将此函数称为out = myFun(1,[],2,3),即为不需要的输入传递一个空数组。


如果两个输入意味着单向使用该函数,而三个输入意味着该函数以另一种方式使用(甚至输入意味着不同的东西),请使用VARARGIN

function out = myFun(varargin)

%# if 2 inputs, it's scenario 1, with 3 it's scenario 2
switch nargin
case 2
   firstParameter = varargin{1};
   secondParameter = varargin{2};
   scenario = 1;
case 3
   firstParameter = varargin{1}; %# etc
otherwise
   error('myFun is only defined for two or three inputs')
end

最后,您还可以将输入作为parameterName / parameterValue对传递。有关如何处理此类输入的信息,请参阅this question

答案 1 :(得分:1)

您可以使用nargin来验证函数的参数,因此如果您只需要执行一些操作,或者如果tou传递更多参数,请执行其他操作。等..好像:

function yours(arg1,arg2,arg3,arg4,arg5,...,argn)
  if nargin < 5
    arg5 =  'Init'
  elseif (nargin > 1)
    arg2 =  'Init'
    arg3 =  'Init'
    arg4 =  'Init'
    arg5 =  'Init'
   end
end

所以你可以控制你收到的参数数量。