exponenta event banner

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

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

Входные методы Синтаксического анализатора 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

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

| |

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

Больше о