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”可能会导致超出单元格索引