matlab.mixin.indexing.ForbidsPublicDotMethodCall class

Пакет: matlab.mixin.indexing

Запретите открытые методы вызова с помощью записи через точку

Описание

Классы, которые наследовались matlab.mixin.indexing.RedefinesParen или matlab.mixin.indexing.RedefinesBrace позвольте вызовы метода с помощью записи через точку. Чтобы заставить такой класс зеркально отразить поведение встроенных числовых классов, которые запрещают вызовы метода с точкой, используют matlab.mixin.indexing.ForbidsPublicDotMethodCall суперкласс. Например, obj экземпляр класса, который наследовался RedefinesParen и ForbidsPublicDotMethodCall. Класс задает открытый метод myMethod:

  • myMethod(obj) вызывает метод.

  • obj.myMethod ошибки.

  • label="myMethod"; obj.(label) ошибки.

  • obj(1).myMethod вызовы parenReference.

  • label="myMethod"; obj(1).(label) вызовы parenReference.

ForbidsPublicDotMethodCall не может использоваться с классами, которые наследовались matlab.mixin.indexing.RedefinesDot или matlab.mixin.indexing.OverridesPublicDotMethodCall.

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

Abstract
true
HandleCompatible
true

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

Примеры

свернуть все

ArrayWithLabelNoDotMethod класс наследовался RedefinesParen и ForbidsPublicDotMethodCall. (Чтобы видеть полное объяснение ArrayWithLabel класс без использования ForbidsPublicDotMethodCall, смотрите matlab.mixin.indexing.RedefinesParen.)

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

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

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

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

classdef ArrayWithLabelNoDotMethod < ...
    matlab.mixin.indexing.RedefinesParen & ...
    matlab.mixin.indexing.ForbidsDotMethodCall

    properties (Access=private)
        ContainedArray
    end
    
    properties (Access=public)
        Label
    end
    
    methods
        function obj = ArrayWithLabelNoDotMethod(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

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

a = ArrayWithLabelNoDotMethod([2 3; 5 7]);
a.Label = "primes"
a = 

  2×2 ArrayWithLabelNoDotMethod array with properties:

    Label: "primes"

Отобразите массив с помощью value метод. Вызовите значение, не используя запись через точку.

value(a)
ans = 

     2     3
     5     7

Сделайте тот же вызов метода с помощью записи через точку. Поскольку этот класс наследовался ForbidsPublicDotMethodCallMATLAB® ошибки.

a.value
Dot method call is not supported for objects of type 'ArrayWithLabelNoDotMethod'.
Consider using function call syntax.
Введенный в R2021b
Для просмотра документации необходимо авторизоваться на сайте