필터 지우기
필터 지우기

name value pairs with variable input arguments

조회 수: 9 (최근 30일)
malki adil
malki adil 2022년 2월 3일
편집: Benjamin Kraus 2022년 2월 3일
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

답변 (1개)

Benjamin Kraus
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

카테고리

Help CenterFile Exchange에서 Function Creation에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by