matlab.mixin.indexing.RedefinesParen class

Пакет: matlab.mixin.indexing

Настройте операции индексации класса то использование круглые скобки

Описание

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

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

  • cat

  • empty

  • size

  • parenAssign

  • parenDelete

  • parenListlength

  • parenReference

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

Abstract
true
HandleCompatible
true

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

Методы

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

Примеры

свернуть все

ArrayWithLabel класс имеет два свойства: ContainedArray и Label. ArrayWithLabel настраивает индексацию круглых скобок в ContainedArray путем наследования matlab.mixin.indexing.RedefinesParen и реализация всех его абстрактных методов:

  • parenReference: Индексация круглых скобок указателей в ContainedArray.

  • parenDelete: Удаляет индексированные круглыми скобками элементы ContainedArray.

  • parenAssign: Значения присвоений к индексируемым элементам ContainedArray. Правая сторона выражения присваивания должна быть экземпляром ArrayWithLabel.

  • parentListLength: Определяет количество значений, чтобы возвратиться из операций индексации круглых скобок на ContainedArray.

  • cat: Конкатенации ContainedArray свойство одного или нескольких экземпляров класса.

  • empty: Возвращает экземпляр класса с пустым ContainedArray.

  • size: Возвращает размерности ContainedArray.

ArrayWithLabel также обеспечивает два открытых метода:

  • value: Отображает индексируемые значения ContainedArray.

  • sum: Вычисляет сумму индексируемых значений ContainedArray.

ArrayWithLabel Код класса

classdef ArrayWithLabel < matlab.mixin.indexing.RedefinesParen

    properties (Access=private)
        ContainedArray
    end
    
    properties (Access=public)
        Label
    end
    
    methods
        function obj = ArrayWithLabel(val)
            obj.ContainedArray = val;
        end
    end

    methods (Access=protected)
        function varargout = parenReference(obj,indexOp)
            obj.ContainedArray = obj.ContainedArray.(indexOp(1));
            if isscalar(indexOp)
                varargout{1} = obj;
                return;
            end
            % Syntax for forwarding indexing operations
            [varargout{1:nargout}] = obj.(indexOp(2:end));
        end

        function obj = parenAssign(obj,indexOp,varargin)
            if isscalar(indexOp)
                assert(nargin==3);
                rhs = varargin{1};
                obj.ContainedArray.(indexOp) = rhs.ContainedArray;
                return;
            end
            [obj.(indexOp(2:end))] = varargin{:};
        end

        function n = parenListLength(obj,indexOp,ctx)
            if numel(indexOp) <= 2
                n = 1;
                return;
            end
            containedObj = obj.(indexOp(1:2));
            n = listLength(containedObj,indexOp(3:end),ctx);
        end

        function obj = parenDelete(obj,indexOp)
            obj.ContainedArray.(indexOp) = [];
        end
    end

    methods (Access=public)
        function out = value(obj)
            out = obj.ContainedArray;
        end
        
        function out = sum(obj)
            out = sum(obj.ContainedArray,"all");
        end
        
        function out = cat(dim,varargin)
            numCatArrays = nargin-1;
            newArgs = cell(numCatArrays,1);
            for ix = 1:numCatArrays
                if isa(varargin{ix},'ArrayWithLabel')
                    newArgs{ix} = varargin{ix}.ContainedArray;
                else
                    newArgs{ix} = varargin{ix};
                end
            end
            out = ArrayWithLabel(cat(dim,newArgs{:}));
        end

        function varargout = size(obj,varargin)
            [varargout{1:nargout}] = size(obj.ContainedArray,varargin{:});
        end
    end

    methods (Static, Access=public)
        function obj = empty()
            obj = ArrayWithLabel([]);
        end
    end
end

Используйте ArrayWithLabel Экземпляр

Создайте ArrayWithLabel объект с матрицей 2 на 2 и присвоение строка к Label свойство.

a = ArrayWithLabel([2 3; 5 7]);
a.Label = "primes"
a=2×2 object
  2×2 ArrayWithLabel array with properties:

    Label: "primes"

Отобразите первый столбец массива. parenReference берет a и экземпляр IndexingOperation в качестве аргументов. indexOp идентифицирует тип ссылки (Paren) и ссылаемые индексы. parenReference получает элементы, соответствующие тем индексам и затем вперед value вызов метода MATLAB. (Комментарий в коде идентифицирует линию в parenReference то, что вперед дополнительные операции после начальной индексации круглых скобок.)

a(:,1).value
ans = 2×1

     2
     5

Создайте новый экземпляр b из ArrayWithLabel с вектором 1 на 2. Присвойте значения b к второй строке массива в a. parenAssign метод использует индексы на левой стороне присвоения, чтобы определить который элементы a заменять.

b = ArrayWithLabel([11 13]);
a(2,:) = b;
a.value
ans = 2×2

     2     3
    11    13

Используйте sum метод, чтобы найти сумму значений во втором столбце.

a(:,2).sum
ans = 16
Введенный в R2021b