MATLAB® задает функции для использования в валидации свойства. Эти функции поддерживают шаблоны общего использования для валидации и предоставляют описательные сообщения об ошибке. Следующие таблицы категоризируют функции валидации MATLAB и описывают их использование.
Имя | Значение | Функции, обращенные входные параметры |
---|---|---|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
Имя | Значение | Функции, обращенные входные параметры |
---|---|---|
|
| |
|
| |
|
| |
|
|
Имя | Значение | Функции, обращенные входные параметры |
---|---|---|
|
| Отношения определения класса использования |
|
| |
|
| |
|
| |
|
|
Имя | Значение | Функции, обращенные входные параметры |
---|---|---|
|
| |
| value должен быть скаляр или быть пустым. | |
| value должен быть вектор. |
Имя | Значение | Функции, обращенные входные параметры |
---|---|---|
|
| |
| value должен быть в области значений. |
Имя | Значение | Функции, обращенные входные параметры |
---|---|---|
|
| |
| path должен относиться к папке. | |
|
| Не применяется |
|
| Не применяется |
|
| Не применяется |
| varname должно быть допустимое имя переменной. |
Используйте функции валидации свойства в определениях классов, чтобы ввести определенные ограничения для значений свойств. Функция валидации принимает потенциальное значение свойства как аргумент и выдает ошибку, если значение не удовлетворяет конкретное требование, наложенное функцией.
Во время процесса валидации MATLAB передает значение каждой функции валидации, перечисленной в определении класса. MATLAB вызывает каждую функцию слева направо и выдает первую ошибку, с которой сталкиваются. Значение, переданное функциям валидации, является результатом любого преобразования, примененного техническими требованиями размера и классом. Для получения дополнительной информации о классе и валидации размера, смотрите Валидацию Класса и Размера Свойства.
Для списка функций валидации MATLAB см. Функции валидации MATLAB.
Задайте функции валидации как список, разделенный запятыми имен функций или вызовов функции с аргументами, заключенными в фигурные скобки.
classdef MyClass properties Prop {fcn1,fcn2,...} = defaultValue end end
MATLAB передает потенциальное значение свойства функции валидации неявно. Однако, если функция валидации требует входных параметров в дополнение к потенциальному значению свойства, то необходимо включать и свойство и дополнительные аргументы. Дополнительные аргументы должны быть литеральными значениями и не могут сослаться на переменные. Литеральные значения являются несимвольными представлениями, такими как числа и текст.
Например, рассмотрите функцию mustBeGreaterThan
. Это требует предельного значения как входного параметра. Эта функция валидации требует, чтобы значение свойства было больше этого предельного значения.
Передайте свойство в качестве первого аргумента. Используйте имя свойства, но не заключайте имя в кавычки. Это определение свойства ограничивает Prop
к значениям, больше, чем 10
.
properties Prop {mustBeGreaterThan(Prop,10)} end
Следующий класс задает функции валидации для каждого свойства.
Data
должно быть числовым и конечным.
Interp
должна быть одна из этих трех перечисленных опций. Задайте значение по умолчанию для этого свойства удовлетворить этому требованию.
classdef ValidatorFunction properties Data {mustBeNumeric, mustBeFinite} Interp {mustBeMember(Interp,{'linear','cubic','spline'})} = 'linear' end end
Создание объекта по умолчанию класса показывает начальные значения.
a = ValidatorFunction
a = ValidatorFunction with properties: Data: [] Interp: 'linear'
Присвоение значений к свойствам вызывает функции валидации.
a.Data = 'cubic'
Error setting property 'Data' of class 'ValidatorFunction':
Value must be numeric.
Поскольку Data
валидация свойства не включает числовой класс, нет никакого преобразования char
вектор к числовому значению. Если вы изменяете валидацию Data
свойство задать класс как double
, MATLAB преобразует char
вектор к double
массив.
properties Data double {mustBeNumeric, mustBeFinite} end
Присвоение на char
вектор не производит ошибку, потому что MATLAB преобразует char
вектор, чтобы классифицировать double
.
a.Data = 'cubic'
a = ValidatorFunction with properties: Data: [99 117 98 105 99] Interp: 'linear'
Присвоение на Interp
свойство требует точного совпадения.
a = ValidatorFunction;
a.Interp = 'cu'
Error setting property 'Interp' of class 'ValidatorFunction':
Value must be a member of this set
linear
cubic
spline
Используя перечисление класс обеспечивает неточное соответствие и нечувствительность к регистру.
Валидация свойства с помощью класса перечисления обеспечивает эти преимущества:
Неточное, нечувствительное к регистру соответствие для однозначных символьных векторов или строковых скаляров
Преобразование неточных соответствий к правильным значениям
Например, предположите, что вы задаете InterpMethod
класс перечисления для Interp
валидация свойства.
classdef InterpMethod enumeration linear cubic spline end end
Измените Interp
валидация свойства, чтобы использовать InterpMethod
класс.
classdef ValidatorFunction properties Data {mustBeNumeric, mustBeFinite} Interp InterpMethod end end
Присвойте значение, совпадающее с первыми несколькими буквами от 'cubic'
.
a = ValidatorFunction;
a.Interp = 'cu'
a = ValidatorFunction with properties: Data: [] Interp: cubic
Функциями валидации являются обычные функции MATLAB, которые спроектированы для определенной цели подтвердить значения аргумента функции и аргумент свойства. Функции раньше подтверждали свойства:
Примите потенциальное значение свойства как входной параметр
Не делайте возвращаемых значений
Выдайте ошибки, если валидация перестала работать
Создание вашей собственной функции валидации полезно, когда это необходимо, чтобы обеспечить определенную валидацию, которая не является доступным использованием функций валидации MATLAB. Можно создать локальные функции в файле класса или поместить функцию в путь MATLAB, чтобы быть доступными для использования в любом классе.
Например, ImgData
класс использует локальную функцию, чтобы задать блок проверки допустимости, который ограничивает Data
свойство к только uint8
или uint16
значения, исключая подклассы и не разрешение преобразования из других числовых классов. Предопределенная функция валидации mustBeInRange
ограничивает область значений позволенных значений.
classdef ImgData properties Data {mustBeImData(Data), mustBeInRange(Data,0,255)} = uint8(0) end end function mustBeImData(a) % Check for specific class if ~(strcmp(cname, 'uint8') || strcmp(cname, 'uint16')) eidType = 'ImData:notUint8OrUint16'; msgType = 'Value assigned to Data property is not uint8 or uint16 data.'; throwAsCaller(MException(eidType,msgType)) end end
Когда вы создаете экземпляр ImgData
класс, MATLAB подтверждает это, значением по умолчанию является uint8
или uint16
значение, в области значений 0...255
, и не пустой. Обратите внимание на то, что значение по умолчанию должно удовлетворить требованиям валидации как любое другое значение, присвоенное свойству.
a = ImgData
a = ImgData with properties: Data: 0
Присвоение свойства вызывает блоки проверки допустимости в слева направо порядке. Присвоение char
вектор к Data
свойство вызывает ошибку, выданную mustBeImData
.
a.Data = 'red';
Error setting property 'Data' of class 'ImgData'. Value assigned to
Data property is not uint8 or uint16 data.
Присвоение числового значения, которое является вне области значений, вызывает ошибку, выданную mustBeInRange
.
a.Data = uint16(312);
Error setting property 'Data' of class 'ImgData'. Value must be greater
than or equal to 0, and less than or equal to 255.
Для связанных функций смотрите mustBeInteger
, mustBeNumeric
, и mustBePositive
.
Поддерживайте функции валидации MATLAB для объектов вашего класса путем реализации зависимых функций как методов класса. Чтобы определить который методы реализовать для каждой функции, смотрите страницы ссылки на функцию валидации, перечисленные в этой таблице MATLAB Validation Functions.
Например, предположите, что вы хотите, чтобы ваш класс поддержал mustBeGreaterThan
функция валидации. Перегрузите эти функции MATLAB как методы в вашем классе:
isreal
— Всегда возвращайте логический true
потому что mustBeGreaterThan
не поддерживает комплексные числа.
gt
— Второй объект в сравнении должен быть скаляром, как требуется mustBeGreaterThan
.
SupportmBGT
класс реализует поддержку mustBeGreaterThan
.
classdef SupportmBGT properties Prop(1,1) double {mustBeReal} end methods function obj = SupportmBGT(data) if nargin > 0 obj.Prop = data; end end function tf = isreal(obj) tf = true; end function tf = gt(obj1, obj2) tf = [obj1(:).Prop] > obj2.Prop; end end end
Используйте mustBeGreaterThan
с объектами этого класса:
a = SupportmBGT(10); b = SupportmBGT(12); mustBeGreaterThan(a,b)
Error using mustBeGreaterThan (line 19)
Value must be greater than the comparison value.