11.9.3 Разбор аргументов
Если ни одна из предыдущих функций валидации не подходит, есть также класс inputParser, который может выполнять чрезвычайно сложную проверку входных данных для функций.
- p = inputParser ()
-
Создать объект p класса inputParser.
Этот класс предназначен для лёгкого разбора аргументов функций. Класс поддерживает четыре типа аргументов:
- обязательные (см.
addRequired); - необязательные (см.
addOptional); - именованные (см.
addParameter); - переключатели (см.
addSwitch).
После определения API функции с помощью этих методов, предоставленные аргументы можно разобрать с помощью метода
parseи результаты разбора получить с помощью accessorResults. - обязательные (см.
- inputParser.Parameters
-
Возвращает список имен параметров, уже определённых.
- inputParser.Results
-
Возвращает структуру с именами аргументов в качестве имён полей и соответствующими значениями.
- inputParser.Unmatched
-
Возвращает структуру, аналогичную
Results, но для несопоставленных параметров. Смотрите свойствоKeepUnmatched.
- inputParser.UsingDefaults
-
Возвращает массив ячеек с именами аргументов, использующих значения по умолчанию.
- inputParser.CaseSensitive = boolean
-
Устанавливает, должен ли соответствие имён аргументов быть чувствительным к регистру. По умолчанию значение false.
- inputParser.FunctionName = name
-
Устанавливает имя функции, которое будет использоваться в сообщениях об ошибках. По умолчанию пустая строка.
- inputParser.KeepUnmatched = boolean
-
Устанавливает, следует ли выдавать ошибку для неопределённых аргументов. По умолчанию значение false. Если установлено значение true, дополнительные аргументы можно получить через
Unmatchedпосле методаparse. Обратите внимание, что поскольку аргументыSwitchиParameterмогут быть смешаны, невозможно узнать тип несопоставленных аргументов. Если аргумент не найден, предполагается, что он имеет типParameterи ожидается, что за ним последует значение.
- inputParser.StructExpand = boolean
-
Устанавливает, может ли структура передаваться в функцию вместо пар "параметр/значение". По умолчанию значение true.
Следующий пример показывает, как использовать этот класс:
function check (varargin) p = inputParser (); # create object p.FunctionName = "check"; # set function name p.addRequired ("pack", @ischar); # mandatory argument p.addOptional ("path", pwd(), @ischar); # optional argument ## create a function handle to anonymous functions for validators val_mat = @(x) isvector (x) && all (x <= 1) && all (x >= 0); p.addOptional ("mat", [0 0], val_mat); ## create two arguments of type "Parameter" val_type = @(x) any (strcmp (x, {"linear", "quadratic"})); p.addParameter ("type", "linear", val_type); val_verb = @(x) any (strcmp (x, {"low", "medium", "high"})); p.addParameter ("tolerance", "low", val_verb); ## create a switch type of argument p.addSwitch ("verbose"); p.parse (varargin{:}); # Run created parser on inputs ## the rest of the function can access inputs by using p.Results. ## for example, get the tolerance input with p.Results.tolerance endfunctioncheck ("mech"); # valid, use defaults for other arguments check (); # error, one argument is mandatory check (1); # error, since ! ischar check ("mech", "~/dev"); # valid, use defaults for other arguments check ("mech", "~/dev", [0 1 0 0], "type", "linear"); # valid ## following is also valid. Note how the Switch argument type can ## be mixed into or before the Parameter argument type (but it ## must still appear after any Optional argument). check ("mech", "~/dev", [0 1 0 0], "verbose", "tolerance", "high"); ## following returns an error since not all optional arguments, ## 'path' and 'mat', were given before the named argument 'type'. check ("mech", "~/dev", "type", "linear");Примечание 1: Функция может содержать любую смесь четырёх типов API, но они должны появляться в определённом порядке. Аргументы
Requiredдолжны быть первыми и могут следовать за любыми аргументамиOptional. Только аргументыParameterиSwitchмогут быть смешаны и должны появиться в конце.Примечание 2: Если в API функции смешаны как аргументы
Optional, так иParameter, то как только строковый аргумент Optional не пройдёт валидацию, он будет считаться концом аргументовOptional. Остальные аргументы будут сравниваться с любыми аргументамиParameterилиSwitch.См. также: nargin, validateattributes, validatestring, varargin.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v6.4.0/Parsing-Arguments.html