Можно задать константы, на которые можно ссылаться по имени, создав 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
класс задает свойство константы. Значение свойства constant является объектом указатель (a containers.Map
объект).
classdef ConstMapClass < handle properties (Constant) ConstMapProp = containers.Map end end
Назначение текущей даты Date
, верните указатель из свойства константы, затем выполните назначение с помощью локальной переменной на левой стороне оператора назначения:
localMap = ConstMapClass.ConstMapProp
localMap('Date') = datestr(clock);
Вы не можете использовать ссылку на свойство константы в левой части оператора назначения. Например, MATLAB интерпретирует следующий оператор как создание a struct
именованные ConstMapClass
с полем ConstMapProp
:
ConstMapClass.ConstMapProp('Date') = datestr(clock);
Можно назначить образец определяющего класса свойству constant. MATLAB создает образец, назначенную свойству constant при загрузке класса. Используйте этот метод только, когда определяющий класс является handle
класс.
The 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, можно получить указатель на образец, который назначен свойству constant:
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
.