Пакет: matlab.mixin.indexing
Настройте операции индексации класса то использование круглые скобки
matlab.mixin.indexing.RedefinesParen
класс является абстрактным суперклассом, который позволяет вам настроить, как индексирующие операции с круглыми скобками ведут себя. RedefinesBrace
и RedefinesDot
позвольте вам настроить операции индексации с фигурными скобками и точками. Можно наследоваться этим классам индивидуально, настроив один аспект поведения, не влияя на поведение по умолчанию других операций индексации.
Чтобы настроить как ваши операции индексации указателей класса с круглыми скобками, наследуйтесь RedefinesParen
и реализация его абстрактные методы:
cat
empty
size
parenAssign
parenDelete
parenListlength
parenReference
Abstract | true |
HandleCompatible | true |
Для получения информации об атрибутах класса см. Атрибуты класса.
Эти методы специализируют стандартный MATLAB® операторы и функции для объектов в этом классе.
cat | Реализуйте этот метод с подписью
| ||||
empty | Реализуйте этот метод с подписью
| ||||
size | Реализуйте этот метод с подписью
| ||||
ctranspose |
| ||||
end |
| ||||
horzcat |
| ||||
isempty |
| ||||
length |
| ||||
ndims |
| ||||
numel |
| ||||
reshape |
| ||||
transpose |
| ||||
vertcat |
|
parenAssign | Настройте обработку присвоений индекса объекта, которые начинаются с круглых скобок |
parenDelete | Настройте обработку удалений индекса объекта |
parenListLength | Определите количество значений, чтобы возвратиться из индивидуально настраиваемых операций индексации, начинающихся с круглых скобок |
parenReference | Настройте обработку ссылок индекса объекта, которые начинаются с круглых скобок |
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
matlab.mixin.indexing.RedefinesDot
| matlab.mixin.indexing.RedefinesBrace
| matlab.indexing.IndexingOperation
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.