检查是否存在可变参数输入

时间:2016-06-24 15:06:21

标签: matlab

它需要可变数量的参数,但我如何检查特定变量参数是否存在,例如varargin{2},到目前为止我已尝试使用exist但是我可能没有正确使用它

function vatest(testindex,varargin)

if (exist('varargin{1}','var'))
    disp('oneexist')
else if (exist('varargin{2}','var'))
     disp('twoexist')
    end
end

例如vatest(1,2,3)应该输出

  

twoexist

注意:我已经使用nargin来获取输入数量,但请提出其他建议

更新:不使用缩写

的说明

假设我有一个如上所述的测试功能

function vatest(testindex,textindex2,textindex3,varargin)

它有点像

if nargin >3 
%%do something 
if nargin >4
%%do something 
if nargin >5 
%%do something 
if nargin >6 
%%do something 
if nargin >7 
%%do something 
if nargin >8 
%%do something 

由于某种原因,我不再需要输入中的testindex3然后我必须更改所有if conditions的条件我希望它澄清

2 个答案:

答案 0 :(得分:4)

varargin只是一个包含输入的单元格数组。因此,您可以通过测试其长度来确定提供的输入数量:numel(varargin)

exist并非真正为此而设计,并且可能比仅仅确定已知变量的长度要慢得多。

nInputs = numel(varargin)

if nInputs > 1
    disp('More than 1 input')
elseif nInputs > 0
    disp('Only 1 input')
else
    disp('No inputs')
end

或更简单:

fprintf('%d inputs\n', numel(varargin));

答案 1 :(得分:1)

YEY我终于使用了sexist函数:

function vatest(testindex,varargin)

values = {'zero','one','two', 'three', 'four'};
fprintf('%sexist',values{numel(varargin)})
end

出于某种原因,你不想在“一”和“存在”之间留一个空格。所以,这应该做你指定的(但不一定是你想要的)。

更严重的是,我建议switch

function vatest(testindex, varargin)

num_argin = numel(varargin);
fprintf('%d inputs', num_argin);

switch num_argin
    case 1
        % Some code
    case 2
        % Some code
    case 3
        % Some code
    otherwise
        % Some code