Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 检查变量参数输入是否存在_Matlab - Fatal编程技术网

Matlab 检查变量参数输入是否存在

Matlab 检查变量参数输入是否存在,matlab,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)应

它接受可变数量的参数,但如何检查特定的变量参数是否存在,例如
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)
应该输出

两个存在

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

更新:不使用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,然后我必须更改所有
的条件,如果条件
,我希望它澄清
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));

是的,我终于使用了
性别歧视功能:

function vatest(testindex,varargin)

values = {'zero','one','two', 'three', 'four'};
fprintf('%sexist',values{numel(varargin)})
end
出于某种原因,你不想在“一”和“存在”之间留一个空间。因此,这应该做您指定的事情(但不一定是您想要的)

更重要的是,我建议
切换

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

我只想计算test varargin,而不是测试索引~nargin~已经返回的值。在您的示例中,
vatest(1,2,3)
将输出
oneexist
,因为您在检查第二个参数之前先检查第一个参数。现在更有意义了。但是你真的想知道这些话吗?这很麻烦,只是没有必要(IMO)。实际上我想要一个解决方案,这样我就不必改变每一个条件,因为我从一个函数中删除了一个不必要的输入,然后不得不改变所有的条件,所以需要一个更简单的解决方案来解决未来的问题。你总是用简单的解决方案让我惊讶,这些解决方案听起来像是一种更方便的使用方法numel@Umar,看来你对Suever的回答很满意。请考虑接受。这将使这个问题在将来出现在任何有类似问题的人面前,对任何回答你的问题的人来说都是一个很好的姿态=)谢谢你的回答,但是使用这个解决方案,我必须定义一个“so_good”数组!这非常不方便记住,varargin表示可变数量的输入,使用“so_good”可能会导致超出单元格索引