Ввод функций валидации синтаксического анализатора

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

Входные методы Синтаксического анализатора addRequired, addOptional и addParameter каждый принимает дополнительный указатель на функцию валидации. Определяйте указатели на функцию с в (@) символ.

Функции валидации должны принять один входной параметр, и они должны или возвратить скалярное логическое значение (true или false) или ошибка. Если функция валидации возвращает false, Входной Синтаксический анализатор выдает ошибку, и ваша функция прекращает обрабатывать.

Существует несколько способов задать функции валидации:

  • Используйте существующую функцию MATLAB®, такую как ischar или isnumeric. Например, проверяйте, что необходимый вход под названием num является числовым:

    p = inputParser;
    checknum = @isnumeric;
    addRequired(p,'num',checknum)
    
    parse(p,'text')
    The value of 'num' is invalid. It must satisfy the function: isnumeric.
  • Создайте анонимную функцию. Например, проверяйте, что вход num является числовым скаляром, больше, чем нуль:

    p = inputParser;
    checknum = @(x) isnumeric(x) && isscalar(x) && (x > 0);
    addRequired(p,'num',checknum)
    
    parse(p,rand(3))
    The value of 'num' is invalid. It must satisfy the function: @(x) isnumeric(x) && isscalar(x) 
    && (x>0).
  • Задайте свою собственную функцию, обычно локальная функция в том же файле как ваша первичная функция. Например, в файле с именем usenum.m, задайте локальную функцию под названием checknum, который выпускает пользовательские сообщения об ошибке, когда вход num к usenum не является числовым скаляром, больше, чем нуль:

    function usenum(num)
       p = inputParser;
       addRequired(p,'num',@checknum);
       parse(p,num);
    
    function TF = checknum(x)
       TF = false;
       if ~isscalar(x)
           error('Input is not scalar');
       elseif ~isnumeric(x)
           error('Input is not numeric');
       elseif (x <= 0)
           error('Input must be > 0');
       else
           TF = true;
       end
    

    Вызовите функцию с недопустимым входом:

    usenum(-1)
    Error using usenum (line 4)
    The value of 'num' is invalid. Input must be > 0

Смотрите также

| |

Связанные примеры

Больше о