Matlab не предоставляет механизм для этого, но вы можете создать его в коде пользовательского пространства, который является более кратким, чем inputParser или последовательности "if nargin <1 ...". </p>
function varargout = getargs(args, defaults)
%GETARGS Parse function arguments, with defaults
%
% args is varargin from the caller. By convention, a [] means "use default".
% defaults (optional) is a cell vector of corresponding default values
if nargin < 2; defaults = {}; end
varargout = cell(1, nargout);
for i = 1:nargout
if numel(args) >= i && ~isequal(args{i}, [])
varargout{i} = args{i};
elseif numel(defaults) >= i
varargout{i} = defaults{i};
end
end
Тогда вы можете вызывать его в своих функциях следующим образом:
function y = foo(varargin)
%FOO
%
% y = foo(a, b, c, d, e, f, g)
[a, b, c, d, e, f, g] = getargs(varargin,...
{1, 14, 'dfltc'});
Форматирование - это соглашение, которое позволяет вам читать имена параметров до значений по умолчанию. Вы можете расширить ваши getargs () с помощью необязательных спецификаций типов параметров (для обнаружения ошибок или неявного преобразования) и диапазонов количества аргументов.
У этого подхода есть два недостатка. Во-первых, он медленный, поэтому вы не хотите использовать его для функций, которые вызываются в циклах. Во-вторых, справка по функциям Matlab - подсказки по автозаполнению в командной строке - не работают для функций varargin. Но это довольно удобно.