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.FunctionName
= name¶ Устанавливает имя функции, которое будет использоваться в сообщениях об ошибках; По умолчанию пустая строка.
-
: inputParser.CaseSensitive
= boolean¶ Устанавливает, должна ли сопоставление имен аргументов быть регистрозависимым; По умолчанию false.
-
: inputParser.KeepUnmatched
= boolean¶ Установить, должны ли строковые аргументы, которые не соответствуют ни одному параметру, быть обработаны и сохранены в свойстве
Unmatched; По умолчанию false. Если false, то при первом нераспознанном аргументе будет выдано сообщение об ошибке, и разбор будет прекращен. Обратите внимание, что так как аргументыSwitchиParameterмогут быть смешаны, невозможно узнать тип несопоставленного аргумента. Octave предполагает, что все несопоставленные аргументы являются типаParameterи, следовательно, должны быть с последующим значением.
-
: inputParser.PartialMatching
= boolean¶ Установить, могут ли имена аргументов для параметров
ParameterиSwitchбыть заданы в сокращенной форме, если имя однозначно определяет опцию; По умолчанию true. Например, аргумент'opt'будет соответствовать параметру'opt_color', но потерпит неудачу, если также существует параметр'opt_case'.
-
: 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 anonymous function handle for validators valid_vec = @(x) isvector (x) && all (x >= 0) && all (x <= 1); p.addOptional ("vec", [0 0], valid_vec); ## Create two arguments of type "Parameter" vld_type = @(x) any (strcmp (x, {"linear", "quadratic"})); p.addParameter ("type", "linear", vld_type); vld_tol = @(x) any (strcmp (x, {"low", "medium", "high"})); p.addParameter ("tolerance", "low", vld_tol); ## 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 in with or before the Parameter argument type (but it ## must still appear after any Optional arguments). check ("mech", "~/dev", [0 1 0 0], "verbose", "tolerance", "high"); ## following returns an error since an Optional argument, 'path', ## was given after the Parameter argument 'type'. check ("mech", "type", "linear", "~/dev");Примечание 1: Функция может содержать любую комбинацию из четырёх типов API, но они должны появляться в определённом порядке.
Requiredаргументы должны быть первыми и могут быть после них любымиOptionalаргументами. ТолькоParameterиSwitchаргументы могут быть смешаны, и они должны появиться после первых двух типов.Примечание 2: Если и
OptionalиParameterаргументы смешаны в API функции, то как только строковый необязательный аргумент не пройдёт проверку, он будет считаться концомOptionalаргументов. Остальные аргументы будут сравниваться сParameterилиSwitchаргументами.См. также: nargin, validateattributes, validatestring, varargin.
© 1996–2023 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/v9.2.0/Parsing-Arguments.html