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
Использование класса перечисления обеспечивает неточное соответствие и нечувствительность к регистру.
Валидация свойств с использованием класса перечисления обеспечивает следующие преимущества:
Неточное, нечувствительное к регистру совпадение для однозначных векторов char или строковых скаляров
Преобразование неточных соответствий в правильные значения
Например, предположим, что вы задаете 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.
Например, предположим, что вы хотите, чтобы ваш класс поддерживал mustBeGreaterThan
функции валидации. Перегрузите эти функции MATLAB как методы в вашем классе:
isreal
- Всегда возвращайте логические true
потому что mustBeGreaterThan
не поддерживает комплексные числа.
gt
- Второй объект сравнения должен быть скалярным, как требуется mustBeGreaterThan
.
The 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.