MATLAB ® применяет любую проверку класса и размера, определенную для свойства, перед вызовом функций проверки. Назначение свойству, определяющему размер или проверку класса, аналогично присвоению массиву объектов MATLAB. MATLAB может применять преобразования классов и размеров в правой части назначения, чтобы удовлетворить требованиям проверки классов и размеров.
Дополнительные сведения см. в разделе Порядок функций проверки и проверки свойств.
Укажите размер свойства в качестве строки, столбца и дополнительного размера после имени свойства.
classdef MyClass
properties
Prop(dim1,dim2,...) = defaultValue
end
endЭтот класс определяет размер Location свойство 1 на 3. Любое значение, назначенное этому свойству, должно соответствовать этому размеру или может быть преобразовано в этот размер.
classdef ValidateProps properties Location(1,3) end end
неявное значение по умолчанию, назначенное MATLAB, [0 0 0], соответствует указанному размеру:
a = ValidateProps
a =
ValidateProps with properties:
Location: [0 0 0]MATLAB применяет скалярное расширение при назначении скаляра Location собственность.
a = ValidateProps; a.Location = 1
a =
ValidateProps with properties:
Location: [1 1 1]
MATLAB преобразует столбцы в строки в соответствии со спецификацией размера:
col = [1;1;1]
col =
1
1
1
a.Location = col
a =
ValidateProps with properties:
Location: [1 1 1]Двоеточие в спецификации размера указывает, что соответствующий размер может иметь любую длину. Например, можно назначить значение любой длины Label свойство в этом классе.
classdef ValidateProps properties Label(1,:) end end
a = ValidateProps;
a.Label = 'Click to Start'a =
ValidateProps with properties:
Label: 'Click to Start'Назначение свойству, определяющему проверку размера, соответствует тем же правилам, что и эквивалентное назначение индексированного массива. Сведения о поведении индексирования многомерных массивов см. в разделе Совместимые размеры массивов для основных операций.
Определение класса свойства может уменьшить необходимость проверки значений, присвоенных свойству в коде. Любое значение, назначенное свойству, должно принадлежать указанному классу или преобразовываться в указанный класс.
На свойство можно указать только один класс. Использовать функции проверки, такие как mustBeNumeric или mustBeInteger ограничить свойства более широкой категорией классов. Дополнительные сведения о функциях проверки см. в разделе Функции проверки свойств.
Можно использовать любой класс MATLAB или внешний класс, поддерживаемый MATLAB, за исключением классов Java ® и COM .
Поместите имя класса в блок определения свойства, следующий за именем свойства и необязательной спецификацией размера.
classdef MyClass
properties
Prop ClassName = defaultValue
end
endЕсли значение по умолчанию не указано, MATLAB присваивает свойству пустой объект указанного класса. При определении размера и класса MATLAB пытается создать значение по умолчанию для свойства, которое удовлетворяет требованиям к размеру и классу.
MATLAB создает значение по умолчанию, вызывая конструктор класса без аргументов. Класс должен иметь конструктор, который возвращает объект указанного размера при вызове без входных аргументов, или необходимо указать значение по умолчанию для свойства, удовлетворяющее ограничению размера свойства. Дополнительные сведения см. в разделе Значения по умолчанию для каждого размера и класса.
PropsWithClass класс определяет два свойства с определениями класса:
Number - Значения должны иметь класс double или трансформируемый в double.
Today - Значения должны иметь класс char или трансформируемый в char. Значением по умолчанию является char вектор, возвращенный date функция.
classdef PropsWithClass properties Number double Today char = date end end
Создание объекта PropsWithClass класс.
p = PropsWithClass
p =
PropsWithClass with properties:
Number: []
Today: '10-Sep-2016'MATLAB выполняет преобразования из любого совместимого класса в класс свойств. Например, назначить datetime к массиву Today собственность.
p.Today = [datetime('now'),datetime('tomorrow')]; disp(class(p.Today))
ans = char
Потому что datetime класс имеет char конвертер, можно назначить datetime к массиву Today собственность.
Назначение несовместимого значения свойству, использующему проверку класса, приводит к ошибке.
p.Number = datetime('now');Error setting property 'Number' of class 'PropsWithClass':
Invalid data type. Value must be double or be convertible to double.Можно определить класс для управления значениями, назначенными свойству. Классы перечисления позволяют пользователям задавать значения свойств для векторов символов или строковых скаляров с неточным совпадением имен.
Например, предположим, что существует класс, представляющий трехступенчатый механический насос. Можно определить класс перечисления для представления трех скоростей потока.
classdef FlowRate < int32 enumeration Low (10) Medium (50) High (100) end end
Pump имеет метод возврата текущего расхода в галлонах в минуту. Определите Speed свойство как FlowRate класс.
classdef Pump properties Speed FlowRate end methods function getGPM(p) if isempty(p.Speed) gpm = 0; else gpm = int32(p.Speed); end fprintf('Flow rate is: %i GPM\n',gpm); end end end
Пользователи могут устанавливать Speed с использованием неточного текста.
p = Pump;
p.Speed = 'm'p =
Pump with properties:
Speed: MediumЧисловое значение доступно в свойстве.
getGPM(p)
Flow rate is: 50 GPM
Сведения о классах перечисления см. в разделе Определение классов перечисления.
MATLAB поддерживает несколько целых классов (см. Целые числа). Однако ограничение свойства целым классом может привести к переполнению целым числом. Результирующее значение может насыщаться максимальным или минимальным значением в целочисленном диапазоне.
При переполнении целого числа значением, назначенным свойству, может быть значение, отличное от значения в правой части инструкции назначения.
Например, предположим, что требуется ограничить значение свойства скаляром uint8.
classdef IntProperty properties Value(1,1) uint8 end end
Назначение числового значения Value свойство эффективно приводит числовое значение к uint8, но не приводит к ошибке для значений вне диапазона.
a = IntProperty; a.Value = -10; disp(a.Value)
0
Присвоение Value эквивалентно индексированному назначению массива. Если назначенное значение выходит за пределы диапазона значений, uint8 может представлять, MATLAB устанавливает значение до ближайшего значения, которое он может представлять, используя uint8.
a = uint8.empty; a(1) = -10
a = uint8 0
Чтобы избежать возможного переполнения целого числа, используйте комбинацию функций проверки, ограничивающих значение заданным диапазоном, а не целочисленным классом.
classdef IntProperty properties Value(1,1) {mustBeInteger, mustBeNonnegative,... mustBeLessThan(Value,256)} end end
Потому что нет преобразования назначенного значения uint8 , средства проверки извлекают значения из диапазона и выдают соответствующую ошибку.
a = IntProperty; a.Value = -10;
Error setting property 'Value' of class 'IntProperty':
Value must be nonnegative.Любое значение свойства по умолчанию, назначенное в определении класса, должно соответствовать указанной проверке.
MATLAB неявно определяет значение по умолчанию, если в определении класса не указано значение по умолчанию. В этой таблице показано, как размер и класс определяют неявное значение по умолчанию для классов MATLAB.
| Размер | Класс | Неявное значение по умолчанию, назначенное MATLAB |
|---|---|---|
| Любой числовой | Массив m-by-n нулей указанного класса. |
| Любой класс | m-by-0 или 0-by-n указанного класса. |
|
| m-на-n символьный массив пробелов. |
|
| Массив ячеек m-by-n с каждой ячейкой, содержащей двойную ячейку 0-by-0. |
|
| m-by-n |
|
| m-by-n |
| класс перечисления | Первый элемент перечисления, определенный в классе. |
|
| Ошибка во время выполнения - определите значение по умолчанию в классе. |
Чтобы определить неявное значение по умолчанию для спецификаций ненулевого и явного размера, MATLAB вызывает конструктор класса по умолчанию и строит массив указанного размера, используя экземпляр, возвращаемый вызовом конструктора. Если класс не поддерживает конструктор по умолчанию (то есть конструктор, вызываемый без аргументов), то MATLAB выдает ошибку при создании экземпляра класса, содержащего проверку.
Если указанный размер имеет нулевой или неограниченный размер (:), MATLAB создает значение по умолчанию, которое является пустым массивом с нулевым значением неограниченного размера.
Для гетерогенных массивов MATLAB вызывает getDefaultScalarElement для получения объекта по умолчанию.