exponenta event banner

Проверка входов функций с помощью атрибутов validateatributes

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

validateattributes требует передачи переменной для проверки и поддерживаемых типов данных для этой переменной. При необходимости передайте набор атрибутов, описывающих допустимые размеры или значения.

Проверка типа данных и других атрибутов

Определение функции в файле с именем checkme.m который принимает до трех входов: a, b, и c. Убедитесь, что:

  • a - двумерный массив положительных значений двойной точности.

  • b содержит 100 числовых значений в массиве с 10 столбцами.

  • c является непустым символьным вектором или массивом ячеек.

function checkme(a,b,c)

validateattributes(a,{'double'},{'positive','2d'})
validateattributes(b,{'numeric'},{'numel',100,'ncols',10})
validateattributes(c,{'char','cell'},{'nonempty'})

disp('All inputs are ok.')

Фигурные скобки {} указывают, что набор типов данных и набор дополнительных атрибутов находятся в массивах ячеек. Массивы ячеек позволяют хранить комбинации текстовых и числовых данных или векторы символов разной длины в одной переменной.

Звонить checkme с действительными входами.

checkme(pi,rand(5,10,2),'text')
All inputs are ok.

Скалярное значение pi является двумерным, потому что size(pi) = [1,1].

Звонить checkme с недопустимыми входами. validateattributes выдает ошибку для первого входа, который не прошел проверку, и checkme прекращает обработку.

checkme(-4)
Error using checkme (line 3)
Expected input to be positive.
checkme(pi,rand(3,4,2))
Error using checkme (line 4)
Expected input to be an array with number of elements equal to 100.
checkme(pi,rand(5,10,2),struct)
Error using checkme (line 5)
Expected input to be one of these types:

  char, cell

Instead its type was struct.

В сообщениях об ошибках по умолчанию используется общий термин input для ссылки на аргумент, не прошедший проверку. При использовании сообщения об ошибке по умолчанию единственным способом определить, какой ввод не удался, является просмотр указанной строки кода в checkme.

Добавление имени ввода и позиции к ошибкам

Определение функции в файле с именем checkdetails.m который выполняет ту же проверку, что и checkme, но добавляет сведения о входном имени и позиции в сообщения об ошибках.

function checkdetails(a,b,c)

validateattributes(a,{'double'},{'positive','2d'},'','First',1)
validateattributes(b,{'numeric'},{'numel',100,'ncols',10},'','Second',2)
validateattributes(c,{'char'},{'nonempty'},'','Third',3)

disp('All inputs are ok.')

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

Звонить checkdetails с недопустимыми входами.

checkdetails(-4)
Error using checkdetails (line 3)
Expected input number 1, First, to be positive.
checkdetails(pi,rand(3,4,2))
Error using checkdetails (line 4)
Expected input number 2, Second, to be an array with
number of elements equal to 100.

См. также

|