Проверьте законность массива
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
Создайте пользовательскую функцию, которая проверяет входные параметры с 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
A
Входной параметрВведите, заданный как любой тип массива.
Типы данных: единственный
| удваиваются
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| логический
| char
| строка
| struct
| ячейка
| function_handle
Поддержка комплексного числа: Да
классы
Допустимые типы данныхДопустимые типы данных, заданные как массив ячеек из символьных векторов или вектор строки. Каждый элемент classes
может быть именем любого встроенного или пользовательского класса, включая:
единственный | Номер с одинарной точностью |
'double' | С двойной точностью номер |
int8 | 8-битное целое число со знаком |
int16 | 16-битное целое число со знаком |
int32 | 32-битное целое число со знаком |
int64 | 64-битное целое число со знаком |
uint8 | 8-битное целое число без знака |
uint16 | 16-битное целое число без знака |
uint32 | 32-битное целое число без знака |
uint64 | 64-битное целое число без знака |
логический | Логический 1 (true ) или 0 (false ) |
'char' | Символ |
Строка | StringArray |
Struct () | Массив структур |
ячейка | CellArray |
Таблица | Таблица |
'function_handle' | Указатель на функцию |
Числовой | Любой тип данных, для которого функция isa(A,'numeric') возвращается верный, включая int8 , int16 , int32 , int64 , uint8 , uint16 , uint32 , uint64 , single или double |
| Любое другое имя класса |
Типы данных: ячейка
| строка
атрибуты
Допустимые атрибутыДопустимые атрибуты, заданные как массив ячеек.
Некоторые атрибуты также требуют числовых значений, таких как атрибуты, которые задают размер или число элементов 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', N | N- массив |
'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 . |
Типы данных: ячейка
funcName
Имя функции для валидацииИмя функции для валидации, заданной как вектор символа или как скаляр строки. Если вы задаете пустой символьный вектор, ''
или строку <missing>
, то функция validateattribute
игнорирует входной параметр funcName
.
Типы данных: char | string
varName
Имя входной переменнойИмя входной переменной, заданной как вектор символа или скаляр строки. Если вы задаете пустой символьный вектор, ''
или строку <missing>
, то функция validateattribute
игнорирует входной параметр varName
.
Типы данных: char | string
argIndex
Положение входного параметраПоложение входного параметра, заданного как положительное целое число.
Типы данных: double
Указания и ограничения по применению:
Некоторые сообщения об ошибке являются упрощенной версией сообщения об ошибке MATLAB.
classes
, funcName
, varName
и аргументы argIndex
должны быть постоянными.
Названия атрибута должны быть постоянными.
В сгенерированном коде формат чисел в сообщении об ошибке может отличаться от формата в MATLAB. Например, вот сообщение об ошибке в MATLAB:
Expected input to be an array with all of the values > 3.
Вот сообщение об ошибке в сгенерированном коде:
Expected input to be an array with all of the values > 3.000000000000000e+00.
inputParser
| is*
| isa
| isnumeric
| validatestring
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.