Можно задать константы, к которым можно обратиться по наименованию путем создания класса MATLAB®, который задает постоянные свойства.
Используйте постоянные свойства задать постоянные значения, к которым можно получить доступ по наименованию. Создайте класс с постоянными свойствами путем объявления атрибута Constant
в блоках свойства. Установка атрибута Constant
означает, что, когда-то инициализированный к значению, заданному в блоке свойства, значение не может быть изменено.
Присвойте любое значение свойству Constant
, включая выражение MATLAB. Например:
classdef NamedConst properties (Constant) R = pi/180 D = 1/NamedConst.R AccCode = '0145968740001110202NPQ' RN = rand(5) end end
MATLAB оценивает выражения при загрузке класса. Поэтому значения, присвоения MATLAB к RN
являются результатом единственного вызова rand
, функционируют и не изменяются с последующими ссылками на NamedConst.RN
. Вызов clear
classes
заставляет MATLAB перезагружать класс и повторно инициализировать постоянные свойства.
Обратитесь к постоянному использованию имени класса и имени свойства:
ClassName.PropName
Например, чтобы использовать класс NamedConst
, заданный в предыдущем разделе, сошлитесь на константу для градуса к преобразованию радиана, R
:
radi = 45*NamedConst.R
radi = 0.7854
Чтобы создать библиотеку для, постоянные значения, к которым можно получить доступ по наименованию, сначала создайте папку пакета, затем задайте различные классы, чтобы организовать константы. Например, чтобы реализовать набор констант, которые полезны для того, чтобы сделать астрономические вычисления, задайте класс AstroConstants
в пакете под названием constants
:
+constants/@AstroConstants/AstroConstants.m
Класс задает набор свойств Constant
с присвоенными значениями:
classdef AstroConstants properties (Constant) C = 2.99792458e8 % m/s G = 6.67259 % m/kgs Me = 5.976e24 % Earth mass (kg) Re = 6.378e6 % Earth radius (m) end end
Чтобы использовать этот набор констант, сошлитесь на них с полностью определенным именем класса. Например, следующая функция использует некоторые константы, заданные в AstroContants
:
function E = energyToOrbit(m,r) E = constants.AstroConstants.G * constants.AstroConstants.Me * m * ... (1/constants.AstroConstants.Re-0.5*r); end
Импорт пакета в функцию избавляет от необходимости повторять имя пакета (см. import
):
function E = energyToOrbit(m,r) import constants.*; E = AstroConstants.G * AstroConstants.Me * m * ... (1/AstroConstants.Re - 0.5 * r); end
Если класс задает постоянное свойство со значением, которое является объектом указателя, можно присвоить значения свойствам объектов указателя. Создайте локальную переменную, чтобы получить доступ к объекту указателя.
Например, класс ConstMapClass
задает постоянное свойство. Значение постоянного свойства является объектом указателя (объект containers.Map
).
classdef ConstMapClass < handle properties (Constant) ConstMapProp = containers.Map end end
Чтобы присвоить текущую дату ключу Date
, возвратите указатель в постоянное свойство, затем сделайте присвоение с помощью локальной переменной на левой стороне оператора присваивания:
localMap = ConstMapClass.ConstMapProp
localMap('Date') = datestr(clock);
Вы не можете использовать ссылку на постоянное свойство на левой стороне оператора присваивания. Например, MATLAB интерпретирует следующий оператор как создание struct
по имени ConstantMapClass
с полем ConstMapProp
:
ConstMapClass.ConstMapProp('Date') = datestr(clock);
Можно присвоить экземпляр класса определения к постоянному свойству. MATLAB создает экземпляр, присвоенный постоянному свойству при загрузке класса. Используйте этот метод только, когда класс определения будет классом handle
.
MyProject
является примером такого класса:
classdef MyProject < handle properties (Constant) ProjectInfo = MyProject end properties Date Department ProjectNumber end methods (Access = private) function obj = MyProject obj.Date = datestr(clock); obj.Department = 'Engineering'; obj.ProjectNumber = 'P29.367'; end end end
Ссылочные данные свойства через свойство Constant
:
MyProject.ProjectInfo.Date
ans = 18-Apr-2002 09:56:59
Поскольку MyProject
является классом Handle, можно получить указатель на экземпляр, который присвоен постоянному свойству:
p = MyProject.ProjectInfo;
Доступ к данным в классе MyProject
с помощью этого указателя:
p.Department
ans = Engineering
Измените непостоянные свойства класса MyProject
с помощью этого указателя:
p.Department = 'Quality Assurance';
p
является указателем на экземпляр MyProject
, который присвоен ProjectInfo
постоянное свойство:
MyProject.ProjectInfo.Department
ans = Quality Assurance
Очистка класса приводит к присвоению нового экземпляра MyProject
к свойству ProjectInfo
.
clear MyProject
MyProject.ProjectInfo.Department
ans = Engineering
Можно присвоить экземпляр класса определения как значение по умолчанию свойства только, когда свойство объявляется как Constant
Постоянные свойства не поддерживают события свойства PreGet
или PostGet
. MATLAB выдает предупреждение во время инициализации класса, если вы устанавливаете атрибут GetObservable
свойства Constant
к true
.