Проверка свойств MATLAB ® позволяет устанавливать определенные ограничения на значения свойств. Проверку можно использовать для ограничения класса и размера значений свойств. Кроме того, можно использовать функции для определения критериев, которым должно соответствовать значение свойства. MATLAB определяет набор функций проверки и позволяет создавать собственные функции проверки .
Использование проверки свойств необязательно в определениях классов.
Дополнительные сведения о проверке свойств см. в разделах Проверка класса и размера свойств, Функции проверки свойств и Интерфейс метаданных с проверкой свойств.
Выделенная область в следующем коде показывает синтаксис проверки свойств.

Проверка свойства включает в себя любое из следующих действий:
Размер - длина каждого измерения, заданная как положительное целое число или двоеточие. Двоеточие указывает, что в этом измерении допускается любая длина. Значение, назначенное свойству, должно соответствовать указанному размеру или быть совместимым с указанным размером. Дополнительные сведения см. в разделе Проверка размера свойства.
Class - имя одного класса MATLAB. Значение, назначенное свойству, должно принадлежать указанному классу или преобразовываться в указанный класс. Используйте любой класс MATLAB или внешний класс, поддерживаемый MATLAB, за исключением классов Java ® и COM. Дополнительные сведения см. в разделе Проверка класса свойств.
Функции - список имен функций проверки, разделенных запятыми. MATLAB передает значение, назначенное свойству, каждой функции проверки после применения возможных преобразований классов и размеров. Функции валидатора выдают ошибки в случае сбоя проверки, но не возвращают значения. Дополнительные сведения см. в разделе Функции проверки свойств.
Список функций проверки MATLAB см. в разделе Функции проверки свойств.
Используйте проверку свойств для общих свойств для управления значениями, назначенными свойствам кодом пользователя.
Если требуется ограничить значения свойств фиксированным набором идентификаторов, создайте класс перечисления для этих идентификаторов и ограничьте свойство этим классом. Сведения о классах перечисления см. в разделе Определение классов перечисления.
Правила преобразования типов MATLAB применяются к проверке свойств. Например, MATLAB может принудительно переходить от одного числового типа к другому. Поэтому ограничение значения свойства определенным числовым типом, например двойным, не препятствует назначению свойству других числовых типов.
Чтобы гарантировать, что свойству можно присвоить только определенный тип значения, ограничьте свойство типом, поддерживающим только желаемые преобразования типов, или используйте функцию проверки, чтобы указать точный класс, разрешенный для свойства, вместо указания типа свойства. MATLAB оценивает спецификацию типа перед выполнением каких-либо функций проверки. Дополнительные сведения см. в разделе Порядок проверки.
Убедитесь, что любое значение по умолчанию, назначенное свойству, соответствует ограничениям, наложенным указанной проверкой. Если значение по умолчанию не указано, MATLAB создает значение по умолчанию путем назначения пустого объекта указанного класса или вызова конструктора по умолчанию, если ограничение размера не позволяет использовать пустое значение по умолчанию. Конструктор по умолчанию должен возвращать объект правильного размера.
ValidateProps класс определяет три свойства с проверкой.
classdef ValidateProps properties Location(1,3) double {mustBeReal, mustBeFinite} Label(1,:) char {mustBeMember(Label,{'High','Medium','Low'})} = 'Low' State(1,1) matlab.lang.OnOffSwitchState end end
Location должен быть массивом класса 1 на 3 double значения которых являются действительными конечными числами.
Label должно быть char вектор, который является либо 'High', 'Medium', или 'Low'.
State должен быть членом перечисления matlab.lang.OnOffSwitchState класс (off или on).
Создание объекта ValidateProps класс выполняет проверку неявных и явных значений по умолчанию:
a = ValidateProps
a =
ValidateProps with properties:
Location: [0 0 0]
Label: 'Low'
State: offПри создании объекта MATLAB:
Инициализирует Location значение свойства для [0 0 0] для удовлетворения требований к размеру и классу.
Устанавливает Label свойство до значения по умолчанию, 'Low'. Значение по умолчанию должно быть членом разрешенного набора значений. Пустое char неявное значение по умолчанию может привести к ошибке.
Устанавливает State к свойству off элемент перечисления, определенный matlab.lang.OnOffSwitchState класс.
Сведения о том, как MATLAB выбирает значения по умолчанию, см. в разделе Значения по умолчанию для каждого размера и класса.
Когда свойству присваивается значение, включая значения по умолчанию, указанные в определении класса, MATLAB выполняет проверку в следующем порядке:
Проверка класса - эта проверка может вызвать преобразование в другой класс, например преобразование char кому string. Назначение свойствам соответствует правилам преобразования MATLAB для массивов.
Проверка размера - эта проверка может вызвать преобразование размера, например скалярное расширение или преобразование вектора столбца в вектор строки. Назначение свойству, определяющему проверку размера, ведет себя так же, как назначение любому массиву MATLAB. Сведения о индексированном назначении см. в разделе Индексирование массива.
Функции валидатора - MATLAB передает результат проверки класса и размера каждой функции валидации в порядке слева направо. Перед вызовом всех функций проверки может возникнуть ошибка, которая завершит процесс проверки.
Метод Set - MATLAB выполняет проверку свойства перед вызовом метода набора свойств, если он определен для этого свойства. Назначение свойству в наборе свойств или метод get не применяет проверку повторно. Часто методы набора характеристик можно заменить с помощью проверки свойств.
ValueProp класс использует проверку размера, класса и функции, чтобы гарантировать, что назначение Value свойство является двойным скаляром, не отрицательным.
classdef ValueProp properties Value(1,1) double {mustBeNonnegative} = 0 end end
Эта инструкция пытается назначить массиву ячеек свойство. Это назначение нарушает проверку класса.
a.Value = {10,20};Error setting property 'Value' of class 'ValueProp':
Invalid data type. Value must be double or be convertible to double.Эта инструкция пытается назначить свойству двойной массив 1 на 2. Это назначение нарушает проверку размера.
a.Value = [10 20];
Error setting property 'Value' of class 'ValueProp':
Size of value must be scalar.Эта инструкция пытается назначить свойству скалярный двойник. При этом назначении не удается выполнить проверку функции, для которой требуется неотрицательный номер.
a.Value = -10;
Error setting property 'Value' of class 'ValueProp':
Value must be nonnegative.Процесс проверки завершается первой обнаруженной ошибкой.
Можно определить проверку свойств для абстрактных свойств. Проверка применяется ко всем подклассам, реализующим свойство. Однако подклассы не могут использовать проверку реализации свойства. При наследовании проверки для свойства из нескольких классов только одно свойство Abstract в одном суперклассе может определить проверку. Ни один из суперклассов не может определить свойство как nonAbstract.
При изменении проверки свойств во время существования объектов класса MATLAB не пытается применить новую проверку к существующим значениям свойств. Однако MATLAB применяет новую проверку при назначении свойств существующим объектам.
При сохранении объекта в MAT MATLAB сохраняет все значения свойств, не заданные по умолчанию, вместе с объектом. При загрузке объекта MATLAB восстанавливает эти значения свойств во вновь созданном объекте.
Если определение класса изменяет проверку свойства таким образом, что загруженное значение свойства становится недействительным, MATLAB подставляет для этого свойства текущее определенное значение по умолчанию. Тем не менее, load функция подавляет ошибки проверки, возникающие перед назначением значения по умолчанию из текущего определения класса. Поэтому ошибки проверки в ходе операций загрузки игнорируются.
Чтобы проиллюстрировать это поведение, в этом примере создается, сохраняется и загружается объект MonthTemp класс. Этот класс ограничивает AveTemp свойству массива ячеек.
classdef MonthTemp properties AveTemp cell end end
Создать MonthTemp и присвойте значение AveTemp собственность.
a = MonthTemp;
a.AveTemp = {'May',70};Сохранить объект с помощью save.
save TemperatureFile a
Измените определение свойства, чтобы изменить класс проверки для AveTemp свойство из массива ячеек в containers.Map.
classdef MonthTemp properties AveTemp containers.Map end end
Загрузите сохраненный объект с новым определением класса по пути MATLAB. MATLAB не может присвоить сохраненное значение AveTemp свойство, поскольку массив ячеек, {'May',70}, несовместимо с текущим требованием, чтобы значением свойства было containers.Map объект. MATLAB не может преобразовать массив ячеек в containers.Map.
Для устранения несовместимости MATLAB устанавливает AveTemp свойства загруженного объекта к текущему значению по умолчанию, которое является пустым containers.Map объект.
load TemperatureFile a a.AveTemp ans = Map with properties: Count: 0 KeyType: char ValueType: any
Загруженный объект имеет другое значение, назначенное AveTemp свойство, поскольку теперь сохраненное значение недопустимо. Однако процесс загрузки подавляет ошибку проверки.
Чтобы предотвратить потерю данных при изменении определений классов и перезагрузке объектов, реализуйте loadobj метод или метод конвертера классов, который позволяет сохранить значения, удовлетворяющие текущей проверке свойств.
Дополнительные сведения о сохранении и загрузке объектов см. в разделе Сохранение и загрузка процесса для объектов.