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