11.9.3 Разбор аргументов
Если ни одна из предыдущих функций валидации не подходит, существует также класс inputParser, который может выполнять чрезвычайно сложную проверку входных данных для функций.
- : p = inputParser () ¶
-
Создать объект p класса inputParser.
Этот класс разработан для простого разбора аргументов функций. Класс поддерживает четыре типа аргументов:
- обязательные (см.
addRequired); - необязательные (см.
addOptional); - именованные (см.
addParameter); - переключатели (см.
addSwitch).
После определения API функции с помощью этих методов, предоставленные аргументы можно разобрать с помощью метода
parse, а результаты разбора получить с помощью доступараResults. - обязательные (см.
- : inputParser.Parameters ¶
Возвращает список имен параметров, которые уже определены.
- : inputParser.Results ¶
Возвращает структуру с именами аргументов в качестве имен полей и соответствующими значениями.
- : inputParser.Unmatched ¶
Возвращает структуру, похожую на
Results, но для несовпадающих параметров. См. свойствоKeepUnmatched.
- : inputParser.UsingDefaults ¶
Возвращает массив ячеек с именами аргументов, которые используют значения по умолчанию.
- : inputParser.CaseSensitive = boolean ¶
Устанавливает, должны ли совпадения имен аргументов быть чувствительными к регистру. По умолчанию значение ложь.
- : inputParser.FunctionName = name ¶
Устанавливает имя функции, используемое в сообщениях об ошибках; По умолчанию пустая строка.
- : inputParser.KeepUnmatched = boolean ¶
Устанавливает, следует ли выдавать ошибку для неопределенных аргументов. По умолчанию ложь. Если установлено значение истина, к дополнительным аргументам можно получить доступ через
Unmatchedпосле методаparse. Обратите внимание, что поскольку аргументыSwitchиParameterмогут быть смешаны, невозможно определить тип несовпадающих. Если аргумент не совпадает, предполагается, что он имеет типParameter, и ожидается, что за ним последует значение.
- : inputParser.StructExpand = boolean ¶
-
Устанавливает, может ли структура передаваться в функцию вместо пар параметр/значение. По умолчанию значение истина.
Следующий пример демонстрирует, как использовать этот класс:
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/v7.2.0/Parsing-Arguments.html