exponenta event banner

Входы функции синтаксического анализа

В этом примере показано, как определить требуемые и необязательные входы, назначить значения по умолчанию дополнительным входам и проверить все входы пользовательской функции с помощью анализатора входов.

Анализатор ввода обеспечивает согласованный способ проверки и назначения значений по умолчанию входам, повышая надежность и ремонтопригодность кода. Для проверки входных данных можно воспользоваться существующими функциями MATLAB ® или написать собственные процедуры проверки.

Шаг 1. Определите свою функцию.

Создание функции в файле с именем printPhoto.m. printPhoto функция имеет один требуемый ввод для имени файла и дополнительные вводы для отделки (глянцевый или матовый), цветового пространства (RGB или CMYK), ширины и высоты.

function printPhoto(filename,varargin)

В операторе объявления функции сначала укажите требуемые входные данные. Использовать varargin для поддержки дополнительных входов.

Шаг 2. Создайте объект inputParser.

В рамках своей функции звоните inputParser для создания объекта синтаксического анализатора.

p = inputParser;

Шаг 3. Добавьте входные данные в схему.

Добавление входных данных в схему синтаксического анализа в функции с помощью 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) вместе со значением входного сигнала.

Если функция принимает необязательные входные строки или символьные векторы и аргументы «имя-значение», укажите функции проверки для необязательных входных данных. В противном случае анализатор входных данных интерпретирует необязательные строки или векторы символов как имена параметров. Например, checkFinish функция проверки гарантирует, что printPhoto интерпретирует 'glossy' в качестве значения для finish и не является недопустимым именем параметра.

Шаг 4. Задайте свойства для настройки синтаксического анализа (необязательно).

По умолчанию анализатор входных данных делает предположения о чувствительности к регистру, именах функций, входных данных массива структуры, а также о том, следует ли разрешить дополнительные имена параметров и значения, отсутствующие в схеме. Свойства позволяют явно определить поведение. Задайте свойства с помощью точечной нотации, аналогично назначению значений массиву структуры.

Позволить printPhoto чтобы принять дополнительные входные значения параметров, которые не соответствуют входной схеме, путем установки KeepUnmatched свойства анализатора входных данных.

p.KeepUnmatched = true;

Если KeepUnmatched является false (по умолчанию) анализатор ввода выдает ошибку, когда входные данные не соответствуют схеме.

Шаг 5. Проанализируйте входные данные.

В рамках своей функции вызовите parse способ. Передайте значения всех входов функций.

parse(p,filename,varargin{:})

Шаг 6. Используйте входные данные в своей функции.

Доступ к проанализированным входам с помощью этих свойств 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

Шаг 7. Вызовите свою функцию.

Анализатор входных данных ожидает принимать входные данные следующим образом:

  • Сначала необходимые входные данные, в порядке их добавления в схему синтаксического анализа 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'

При использовании аргументов «имя-значение» перед R2021a передайте имена в виде строк или векторов символов и разделите имена и значения запятыми. Например:

printPhoto('myfile.jpg','height',10,'width',8)

Чтобы передать значение для n-го позиционного ввода, укажите значения для предыдущих (n-1) входов или передайте его в качестве пары «имя-значение параметра». Например, эти вызовы функций присваивают одинаковые значения finish (по умолчанию 'glossy') и color:

printPhoto('myfile.gif','glossy','CMYK')  % positional

printPhoto('myfile.gif',color='CMYK')   % name and value

См. также

|

Связанные темы