У меня есть функция, для которой я хотел бы передать аргументы через varargin
и использовать inputParser
, чтобы убедиться, что входные данные являются нормальными. Некоторые аргументы обязательны, а некоторые нет. Вот пример:
function myFunc(varargin)
p = inputParser;
p.addRequired(...
'numStates', ...
@(x) validateattributes(x, {'numeric'}, ...
{'scalar', 'integer', 'positive'}));
p.addRequired(...
'numInps', ...
@(x) validateattributes(x, {'numeric'}, ...
{'scalar', 'integer', 'positive'}));
p.addRequired(...
'numOuts', ...
@(x) validateattributes(x, {'numeric'}, ...
{'scalar', 'integer', 'positive'}));
p.addRequired(...
'X0', ...
@(x) validateattributes(x, {'numeric'}, ...
{'vector'}));
p.addOptional(...
'freq', 10, ...
@(x) validateattributes(x, {'numeric'}, ...
{'scalar', 'integer', 'positive'}));
p.addOptional(...
'SimulinkVariables', struct(), ...
@(x) isa(x, 'struct'));
p.parse(varargin{:});
%# do stuff with variables
end
Я бы хотел передать аргументы следующим образом; не должно иметь значения, какая пара будет передана, когда, пока есть необходимые. Таким образом, пример вызова может быть:
myFunc('numStates', 4, 'numInps', 2, 'numOUts', 3, 'X0', [4;0]);
Видимо, этот синтаксис недопустим; parse()
ожидает, что первые аргументы в нем - это обязательные значения, но они не должны иметь явного имени, то есть, как в:
function myFunc(numStates, numInps, numOuts, X0, varargin)
...
p.parse(numStates, numInps, numOuts, X0, varargin{:});
end
Есть ли простой способ заставить это делать то, что я хочу, то есть первую функцию? Я предполагаю, что проще всего сделать что-то, чтобы изменить порядок элементов varargin
и выбросить имена аргументов, но это не очень элегантно.