В этом примере показано, как настроить операции индексации точки в ScalarStructClass. Экземпляры ScalarStructClass ведите себя во многом как структуры. Пользователи могут динамически добавить поля и присваиваемые значения как struct, но класс также служит основой, к которой могут быть добавлены дополнительные свойства и методы.
Класс наследовался matlab.mixin.Scalar, что означает, что его экземпляры являются скалярными объектами. Единственный возможный размер массивов 1 на 1, и экземпляры не могут быть конкатенированы. Класс также наследовался matlab.mixin.indexing.RedefinesDot и реализует его абстрактные методы обработать операции индексации точки:
dotReference: Указатели отмечают точкой ссылки в частный AddedFields свойство. Синтаксис instance.fieldname возвращает значение, присвоенное полю ссылок.
dotAssign: Добавляют новое поле и соответствующее значение к AddedFields свойство. Синтаксис instance.fieldname = value добавляют поле и его соответствующее значение.
dotListLength: Определяет количество значений, чтобы возвратиться из выражений индексации точки что возвращаемые значения от или значения присвоения к списку, разделенному запятыми.
Класс также задает getAddedFields метод, который возвращает список всех полей и соответствующих значений.
ScalarStructClass Код
classdef ScalarStructClass < matlab.mixin.indexing.RedefinesDot & ...
matlab.mixin.Scalar
properties (Dependent, SetAccess=private)
FieldNames
end
properties (Access=private)
AddedFields struct
end
methods
function out = get.FieldNames(obj)
out = string(fieldnames(obj.AddedFields));
end
end
methods (Access=public)
function obj = ScalarStructClass(fieldName,fieldValue)
if nargin == 1
obj.AddedFields = fieldName;
return;
end
obj.AddedFields = struct(fieldName,fieldValue);
end
function out = getAddedFields(obj)
out = obj.AddedFields;
end
end
methods (Access=protected)
function varargout = dotReference(obj,indexOp)
[varargout{1:nargout}] = obj.AddedFields.(indexOp);
end
function obj = dotAssign(obj,indexOp,varargin)
[obj.AddedFields.(indexOp)] = varargin{:};
end
function n = dotListLength(obj,indexOp,indexContext)
n = listLength(obj.AddedFields,indexOp,indexContext);
end
end
end
Используйте ScalarStructClass Экземпляр
Создайте ScalarStructClass экземпляр с одним полем и соответствующим значением.
myStructClass =
ScalarStructClass with properties:
FieldNames: "Field1"
Добавьте второе поле в экземпляр с помощью точечного присвоения. dotAssign метод принимает IndexingOperation объект, который описывает тип индексации операции (Dot) и имя поля и второй аргумент, который содержит значение нового поля.
Используйте запись через точку, чтобы проверить значение Field2. Как dotAssign, dotReference метод принимает IndexOperation объект, который идентифицирует что поле для доступа.
Используйте getAddedFields видеть полный список полей и значений.
ans = struct with fields:
Field1: 75
Field2: 10
ScalarStructClass также присвоение списка, разделенного запятыми поддержек и ссылка. Добавьте третье поле в myStructClass это содержит массив ячеек.
Доступ к CellArray поле . Класс вызывает dotReference метод и возвращает несколько выходных параметров.
Присвойте несколько новых значений CellArray поле . Поскольку операция присвоения начинается с точечной ссылки и заканчивается индексом фигурной скобки, класс вызывает dotListLength метод в дополнение к dotAssign обрабатывать операцию присвоения.
ans=1×2 cell array
{[5]} {[6]}