name value pairs with variable input arguments
조회 수: 9 (최근 30일)
이전 댓글 표시
function db = name_value_pairs(varargin)
n=length(varargin); db ={};
if mod(n,2)~=0 || n ==0
db= {};
elseif ~ischar(varargin(1:2:nargin))
db = {};
else
for i=1:2:n
db(i)=[db; varargin{i} varargin{i+1}]
end
end
end
%this is code that i have written and ii cant understand why it result
% db =
% 0×0 empty cell array
댓글 수: 0
답변 (1개)
Benjamin Kraus
2022년 2월 3일
편집: Benjamin Kraus
2022년 2월 3일
The problem is:
~ischar(varargin(1:2:nargin))
The varargin input will always be a cell-array, so this condition will never be true.
I think what you want is:
~iscellstr(varargin(1:2:nargin))
This will verify that the input is a cell-array whose elements are all character vectors.
But, putting any issues in the code aside, unless I'm missing something, your entire function can be written like this:
function db = name_value_pairs(varargin)
if mod(nargin,2)~=0 || ~iscellstr(varargin(1:2:nargin))
db = {};
else
db = varargin;
end
In addition, unless you require the added validation, your function can be replaced in your code by just wrapping your inputs in curly braces.
db = name_value_pairs('a',10,'b',20);
db2 = {'a',10,'b',20};
% db and db2 will be the same
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Function Creation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!