В этом примере показано, как задать требуемые и дополнительные входные параметры, присваивают значения по умолчанию дополнительным входным параметрам, и подтверждать все входные параметры к пользовательской функции с помощью Входного Синтаксического анализатора.
Входной Синтаксический анализатор обеспечивает сопоставимый способ подтвердить и присвоить значения по умолчанию входным параметрам, улучшая робастность и поддерживаемость вашего кода. Чтобы подтвердить входные параметры, можно использовать в своих интересах существующий MATLAB® функции или запись ваши собственные стандартные программы валидации.
Создайте функцию в файле с именем printPhoto.m
. printPhoto
функция имеет требуемый вход того для имени файла и дополнительные входные параметры для конца (глянцевый или матовый), цветовое пространство (RGB или CMYK), ширина и высота.
function printPhoto(filename,varargin)
В вашем операторе объявления функции задайте требуемые входные параметры сначала. Используйте varargin
поддерживать дополнительные входные параметры.
В вашей функции вызовите inputParser
создать объект синтаксического анализатора.
p = inputParser;
Добавьте входные параметры в схему парсинга в вашей функции с помощью addRequired
addOptional
, или addParameter
. Для дополнительных входных параметров задайте значения по умолчанию.
Для каждого входа можно задать указатель на функцию валидации, которая проверяет вход и возвращает логический скаляр (true
или false
) или ошибки. Функцией валидации может быть существующая функция MATLAB (такая как ischar
или isnumeric
) или функция, которую вы создаете (такие как анонимная функция или локальная функция).
В printPhoto
функция, filename
необходимый вход. Задайте finish
и color
как дополнительные входные параметры и width
и height
как дополнительные пары значения параметров.
defaultFinish = 'glossy'; validFinishes = {'glossy','matte'}; checkFinish = @(x) any(validatestring(x,validFinishes)); defaultColor = 'RGB'; validColors = {'RGB','CMYK'}; checkColor = @(x) any(validatestring(x,validColors)); defaultWidth = 6; defaultHeight = 4; addRequired(p,'filename',@ischar); addOptional(p,'finish',defaultFinish,checkFinish) addOptional(p,'color',defaultColor,checkColor) addParameter(p,'width',defaultWidth,@isnumeric) addParameter(p,'height',defaultHeight,@isnumeric)
Входные параметры, которые вы добавляете с addRequired
или addOptional
позиционные параметры. Когда вы вызываете функцию с позиционными входными параметрами, задаете те значения в порядке, они добавляются к схеме парсинга.
Входные параметры добавляются с addParameter
не позиционны, таким образом, можно передать значения для height
прежде или после значений для width
. Однако входные параметры значения параметров требуют, чтобы вы передали входное имя (height
или width
) наряду со значением входа.
Если ваша функция принимает дополнительные входные строки или векторы символов и аргументы name-value, задайте функции валидации для дополнительных входных параметров. В противном случае Входной Синтаксический анализатор интерпретирует дополнительные строки или векторы символов как названия параметра. Например, checkFinish
функция валидации гарантирует тот printPhoto
интерпретирует 'glossy'
как значение для finish
и не как имя недопустимого параметра.
По умолчанию Входной Синтаксический анализатор делает предположения о чувствительности к регистру, именах функций, входных параметрах массива структур, и позволить ли дополнительное название и значение параметра, которое не находится в схеме. Свойства позволяют вам явным образом задавать поведение. Установите свойства с помощью записи через точку, похожей на присвоение значений к массиву структур.
Позвольте printPhoto
принять дополнительные входные параметры значения параметров, которые не совпадают с входной схемой путем установки KeepUnmatched
свойство Входного Синтаксического анализатора.
p.KeepUnmatched = true;
Если KeepUnmatched
false
(значение по умолчанию), Входной Синтаксический анализатор выдает ошибку, когда входные параметры не совпадают со схемой.
В вашей функции вызовите parse
метод. Передайте значения всех входных параметров функции.
parse(p,filename,varargin{:})
Доступ к проанализированным входным параметрам с помощью этих свойств inputParser
объект:
Results
— Массив структур с именами и значениями всех входных параметров в схеме.
Unmatched
— Массив структур с названием и значением параметра, которое передается функции, но не находится в схеме (когда KeepUnmatched
true
).
UsingDefaults
— Массив ячеек с именами дополнительных входных параметров, которые присвоены их значения по умолчанию, потому что они не передаются функции.
В printPhoto
функция, отобразите значения для некоторых входных параметров:
disp(['File name: ',p.Results.filename]) disp(['Finish: ', p.Results.finish]) if ~isempty(fieldnames(p.Unmatched)) disp('Extra inputs:') disp(p.Unmatched) end if ~isempty(p.UsingDefaults) disp('Using defaults: ') disp(p.UsingDefaults) end
Входной Синтаксический анализатор ожидает получать входные параметры можно следующим образом:
Необходимые входные параметры сначала, в порядке они добавляются к схеме парсинга с addRequired
.
Дополнительные позиционные входные параметры в порядке они добавляются к схеме с addOptional
.
Позиционные входные параметры перед названием параметра и входными параметрами пары значения.
Название и значение параметра в форме Name1,Value1,...,NameN,ValueN
.
Передайте несколько комбинаций входных параметров к printPhoto
, некоторые допустимые и некоторые недопустимые:
printPhoto('myfile.jpg')
File name: myfile.jpg Finish: glossy Using defaults: 'finish' 'color' 'width' 'height'
printPhoto(100)
Error using printPhoto (line 23) The value of 'filename' is invalid. It must satisfy the function: ischar.
printPhoto('myfile.jpg','satin')
Error using printPhoto (line 23) The value of 'finish' is invalid. Expected input to match one of these strings: 'glossy', 'matte' The input, 'satin', did not match any of the valid strings.
printPhoto('myfile.jpg',height=10,width=8)
File name: myfile.jpg Finish: glossy Using defaults: 'finish' 'color'
При использовании аргументов name-value перед R2021a передайте имена как строки или векторы символов, и разделите имена и значения с запятыми. Например:
printPhoto('myfile.jpg','height',10,'width',8)
Чтобы передать значение для n th позиционный вход, любой задает значения для предыдущего (n – 1) входные параметры или передает вход как пару значения и название параметра. Например, эти вызовы функции присваивают те же значения finish
('glossy'
по умолчанию) и
color
:
printPhoto('myfile.gif','glossy','CMYK') % positional printPhoto('myfile.gif',color='CMYK') % name and value