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 Функции проверки.
Например, предположим, что вы хотите, чтобы ваш класс поддерживал 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.