matlab.mixin.indexing.RedefinesDot class

Пакет: matlab.mixin.indexing

Настройте операции индексации класса то использование точки

Описание

matlab.mixin.indexing.RedefinesDot класс является абстрактным суперклассом, который позволяет вам настроить, как операции индекса с точками ведут себя. RedefinesParen и RedefinesBrace позвольте вам настроить операции индексации с круглыми скобками и фигурными скобками, соответственно. Можно наследоваться этим классам индивидуально, настроив один аспект поведения, не влияя на поведение по умолчанию других операций индексации.

Чтобы настроить как ваши операции индексации указателей класса с точками, наследуйтесь RedefinesDot и реализация его абстрактные методы:

  • dotAssign

  • dotListlength

  • dotReference

Атрибуты класса

Abstract
true
HandleCompatible
true

Для получения информации об атрибутах класса см. Атрибуты класса.

Методы

развернуть все

Примеры

свернуть все

В этом примере показано, как настроить операции индексации точки в 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("Field1",75)
myStructClass = 
  ScalarStructClass with properties:

    FieldNames: "Field1"

Добавьте второе поле в экземпляр с помощью точечного присвоения. dotAssign метод принимает IndexingOperation объект, который описывает тип индексации операции (Dot) и имя поля и второй аргумент, который содержит значение нового поля.

myStructClass.Field2 = 10;

Используйте запись через точку, чтобы проверить значение Field2. Как dotAssign, dotReference метод принимает IndexOperation объект, который идентифицирует что поле для доступа.

myStructClass.Field2
ans = 10

Используйте getAddedFields видеть полный список полей и значений.

myStructClass.getAddedFields
ans = struct with fields:
    Field1: 75
    Field2: 10

ScalarStructClass также присвоение списка, разделенного запятыми поддержек и ссылка. Добавьте третье поле в myStructClass это содержит массив ячеек.

myStructClass.CellArray = {3 4};

Доступ к CellArray поле . Класс вызывает dotReference метод и возвращает несколько выходных параметров.

[v1,v2] = myStructClass.CellArray{:}
v1 = 3
v2 = 4

Присвойте несколько новых значений CellArray поле . Поскольку операция присвоения начинается с точечной ссылки и заканчивается индексом фигурной скобки, класс вызывает dotListLength метод в дополнение к dotAssign обрабатывать операцию присвоения.

[myStructClass.CellArray{:}] = deal(5,6);
myStructClass.CellArray
ans=1×2 cell array
    {[5]}    {[6]}

Введенный в R2021b