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

Проверьте, что входы вашей функции соответствуют набору требований, используя 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 с недопустимыми входами. The 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.

См. также

|