matlab.mixin.Scalar class

Пакет: matlab.mixin
Суперклассы: matlab.mixin.indexing.RedefinesParen

Осуществите скалярное поведение для экземпляров класса

Описание

Экземпляры классов, которые наследовались matlab.mixin.Scalar всегда ведите себя как скаляры:

  • Размер массивов всегда 1 на 1.

  • Создание пустых массивов запрещается.

  • Конкатенация экземпляров запрещается.

Scalar наследовался matlab.mixin.indexing.RedefinesParen. Защищенные методы, которые включают индексацию круглых скобок — parenReference, parenAssign, parenDelete, и parenListLength— ошибка по умолчанию в Scalar. Можно перегрузить эти методы, чтобы настроить поведение круглых скобок для класса.

Примером варианта использования для этого mixin является класс, который действует как интерфейс к части оборудования, такого как автоматизированное устройство. Формирование массива экземпляров такого класса не может быть целесообразным, потому что каждое устройство может быть в различном состоянии или поддержке различных операций. Конкатенация нескольких экземпляров состояний устройства также не имеет очевидного использования или интерпретации.

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

HandleCompatible
true
Abstract
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
Для просмотра документации необходимо авторизоваться на сайте