validateattributes

Проверьте законность массива

Синтаксис

validateattributes(A,classes,attributes)
validateattributes(A,classes,attributes,argIndex)
validateattributes(A,classes,attributes,funcName)
validateattributes(A,classes,attributes,funcName,varName)
validateattributes(A,classes,attributes,funcName,varName,argIndex)

Описание

пример

validateattributes(A,classes,attributes) подтверждает тот массив, A принадлежит по крайней мере одному из заданных классов (или его подкласс) и имеет все заданные атрибуты. Если A не соответствует критериям, то MATLAB® выдает ошибку и отображает отформатированное сообщение об ошибке. В противном случае validateattributes завершается, не отображая вывода.

пример

validateattributes(A,classes,attributes,argIndex) включает положение входного параметра в вашем списке аргументов функции как часть любых сгенерированных сообщений об ошибке.

пример

validateattributes(A,classes,attributes,funcName) включает заданное имя функции в сгенерированные ошибочные идентификаторы.

пример

validateattributes(A,classes,attributes,funcName,varName) включает заданное имя переменной в сгенерированные сообщения об ошибке.

пример

validateattributes(A,classes,attributes,funcName,varName,argIndex) включает заданную информацию в сгенерированные сообщения об ошибке или идентификаторы.

Примеры

свернуть все

classes = {'numeric'};
attributes = {'size',[4,6,2]};

A = rand(3,5,2);
validateattributes(A,classes,attributes)
Expected input to be of size 4x6x2 when it is actually size 3x5x2.

Поскольку A не совпадал с заданными атрибутами, MATLAB выдает сообщение об ошибке.

Определите, увеличивается ли массив или не уменьшается.

A = [1 5 8 2;
     9 6 9 4]
validateattributes(A, {'double'},{'nondecreasing'})
validateattributes(A, {'double'},{'increasing'})
A =

     1     5     8     2
     9     6     9     4

Поскольку A и увеличивается и не уменьшается, validateattributes не выдает ошибку ни для одной проверки атрибута.

Установка A(2,3) равняется результатам A(1,3) в столбце, который строго больше не увеличивается, таким образом, validateattributes выдает ошибку.

A(2,3) = 8
validateattributes(A, {'double'},{'increasing'})
A =

     1     5     8     2
     9     6     8     4

Expected input to be increasing valued.

Однако столбцы остаются неуменьшающимися, поскольку каждый элемент столбца равен или больше, чем предыдущий элемент столбца. Следующий код не выдает ошибку.

validateattributes(A, {'double'},{'nondecreasing'})

Предположение, что a является вторым входным параметром к функции, проверяет, что это неотрицательно.

a = complex(1,1);
validateattributes(a,{'numeric'},{'nonnegative'},2)
Expected input number 2 to be nonnegative.

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

Проверьте, что значения в массиве являются 8-битными целыми числами от 0 до 10.

Примите, что этот код происходит в функции под названием Rankings.

classes = {'uint8','int8'};
attributes = {'>',0,'<',10};
funcName = 'Rankings';
A = int8(magic(4));

validateattributes(A,classes,attributes,funcName)
Error using Rankings
Expected input to be an array with all of the values < 10.

Создайте пользовательскую функцию, которая проверяет входные параметры с inputParser, и используйте validateattributes в качестве функции проверки для методов addOptional и addRequired.

Задайте функцию.

function a = findArea(shape,dim1,varargin)
   p = inputParser;
   charchk = {'char'};
   numchk = {'numeric'};
   nempty = {'nonempty'};

   addRequired(p,'shape',@(x)validateattributes(x,charchk,nempty))
   addRequired(p,'dim1',@(x)validateattributes(x,numchk,nempty))
   addOptional(p,'dim2',1,@(x)validateattributes(x,numchk,nempty))
   parse(p,shape,dim1,varargin{:})
 
   switch shape
      case 'circle'
         a = pi * dim1.^2;
      case 'rectangle'
         a = dim1 .* p.Results.dim2;
   end
end

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

myarea = findArea('rectangle',3,'x')
Error using findArea (line 10)
Argument 'dim2' failed validation with error:
Expected input to be one of these types:

double, single, uint8, uint16, uint32, uint64, int8, int16, int32, int64

Instead its type was char.

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

Задайте функцию.

function v = findVolume(shape,ht,wd,ln)
   validateattributes(shape,{'char'},{'nonempty'},mfilename,'Shape',1)
   validateattributes(ht,{'numeric'},{'nonempty'},mfilename,'Height',2)
   validateattributes(wd,{'numeric'},{'nonempty'},mfilename,'Width',3)
   validateattributes(ln,{'numeric'},{'nonempty'},mfilename,'Length',4)

Вызовите функцию без входного параметра shape.

vol = findVolume(10,7,4)
Error using findVolume
Expected input number 1, Shape, to be one of these types:

char

Instead its type was double.

Error in findVolume (line 2)
validateattributes(shape,{'char'},{'nonempty'},mfilename,'Shape',1)

Имя функции становится частью ошибочного идентификатора.

MException.last.identifier
ans =

MATLAB:findVolume:invalidType

Входные параметры

свернуть все

Введите, заданный как любой тип массива.

Типы данных: единственный | удваиваются | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический | char | строка | struct | ячейка | function_handle
Поддержка комплексного числа: Да

Допустимые типы данных, заданные как массив ячеек из символьных векторов или вектор строки. Каждый элемент classes может быть именем любого встроенного или пользовательского класса, включая:

единственныйНомер с одинарной точностью
'double'С двойной точностью номер
int88-битное целое число со знаком
int1616-битное целое число со знаком
int3232-битное целое число со знаком
int6464-битное целое число со знаком
uint88-битное целое число без знака
uint1616-битное целое число без знака
uint3232-битное целое число без знака
uint6464-битное целое число без знака
логическийЛогический 1 (true) или 0 (false)
'char'Символ
СтрокаStringArray
Struct ()Массив структур
ячейкаCellArray
ТаблицаТаблица
'function_handle'Указатель на функцию
ЧисловойЛюбой тип данных, для которого функция isa(A,'numeric') возвращается верный, включая int8, int16, int32, int64, uint8, uint16, uint32, uint64, single или double
'<class_name>'Любое другое имя класса

Типы данных: ячейка | строка

Допустимые атрибуты, заданные как массив ячеек.

Некоторые атрибуты также требуют числовых значений, таких как атрибуты, которые задают размер или число элементов A. Для этих атрибутов числовое значение или вектор должны сразу следовать за названием атрибута в массиве ячеек.

Эти атрибуты описывают размер и форму массива A.

'2d'Двумерный массив, включая скаляры, векторы, матрицы и пустые массивы
'3d'Массив с тремя или меньшим количеством размерностей
'column'Вектор - столбец, N-by-1
'row'Вектор - строка, 1 N
'scalar'Скалярное значение, 1 на 1
'scalartext'Или скаляр строки или вектор символа, включая входные параметры с нулевыми символами
'vector'Строка или вектор - столбец или скалярное значение
'size', [d1,...,dN]Массив с размерностями d1...-by-dN. Чтобы пропустить проверку конкретной размерности, задайте NaN для той размерности, такой как [3,4,NaN,2].
'numel', NМассив с элементами N
'ncols', NМассив со столбцами N
'nrows', NМассив со строками N
'ndims', NN- массив
'square'Квадратная матрица; другими словами, двумерный массив с равным количеством строк и столбцов
diagДиагональная матрица
'nonempty'Никакие размерности тот равный нуль
'nonsparse'Массив, который не разрежен

Эти атрибуты задают допустимые области значений для значений в A.

'>', NВсе значения, больше, чем N
'>=', NВсе значения, больше, чем или равный N
'<', NВсе значения меньше, чем N
'<=', NВсе значения, меньше чем или равные N
'finite'Все значения конечны
'nonnan'Никакими значениями не является NaN (Не Номер)

Эти атрибуты проверяют типы значений в числовом или логическом массиве, A.

двоичный файлМассив единиц и нулей
'even'Массив даже целых чисел (включает нуль),
'odd'Массив нечетных целых чисел
Целое числоМассив целочисленных значений
действительныйМассив действительных значений
'nonnegative'Никакой элемент не является меньше, чем нуль
'nonzero'Никакой элемент не равен нулю
'positive'Никакой элемент не меньше чем или равен нулю
'decreasing'Каждый элемент столбца является меньше, чем предыдущим элементом и никаким элементом является NaN.
'increasing'Каждый элемент столбца больше, чем предыдущим элементом и никаким элементом является NaN.
'nondecreasing'Каждый элемент столбца больше, чем или равен предыдущему элементу, и никаким элементом не является NaN.
'nonincreasing'Каждый элемент столбца меньше чем или равен предыдущему элементу, и никаким элементом не является NaN.

Типы данных: ячейка

Имя функции для валидации, заданной как вектор символа или как скаляр строки. Если вы задаете пустой символьный вектор, '' или строку <missing>, то функция validateattribute игнорирует входной параметр funcName.

Типы данных: char | string

Имя входной переменной, заданной как вектор символа или скаляр строки. Если вы задаете пустой символьный вектор, '' или строку <missing>, то функция validateattribute игнорирует входной параметр varName.

Типы данных: char | string

Положение входного параметра, заданного как положительное целое число.

Типы данных: double

Расширенные возможности

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

| | | |

Представленный в R2007b

Была ли эта тема полезной?