Пакет: matlab.mixin.indexing
Настройте операции индексации класса то использование фигурные скобки
matlab.mixin.indexing.RedefinesBrace
класс является абстрактным суперклассом, который позволяет вам настроить, как индексирующие операции с фигурными скобками ведут себя. RedefinesParen
и RedefinesDot
позвольте вам настроить операции индексации с круглыми скобками и точками. Можно наследоваться этим классам индивидуально, настроив один аспект поведения, не влияя на поведение по умолчанию других операций индексации.
Чтобы настроить как ваши операции индексации указателей класса с фигурными скобками, наследуйтесь RedefinesBrace
и реализация его абстрактные методы:
braceAssign
braceListlength
braceReference
Abstract | true |
HandleCompatible | true |
Для получения информации об атрибутах класса см. Атрибуты класса.
braceAssign | Настройте обработку присвоений индекса объекта, которые начинаются с фигурных скобок |
braceListLength | Определите количество значений, чтобы возвратиться из индивидуально настраиваемых операций индексации, начинающихся с фигурных скобок |
braceReference | Настройте обработку ссылок индекса объекта, которые начинаются с фигурных скобок |
В этом примере показано, как настроить индексацию фигурной скобки в ArrayofArrays
класс. ArrayOfArrays
реализует 1 n
массив массивов. Содержавшие массивы могут иметь различные классы, формы и размеры. Класс наследовался обоим matlab.mixin.indexing.RedefinesBrace
и matlab.mixin.indexing.RedefinesParen
. Фигурная скобка, индексирующая индивидуальную настройку, обрабатывает ссылки и присвоения на содержавшие массивы:
braceReference
: Указатели заключают в фигурные скобки ссылки в Arrays
свойство класса. Например, синтаксис instance
idx
} получает доступ к содержавшему массиву в индексе idx
в Arrays
.
braceAssign
: Указатели заключают в фигурные скобки присвоения в Arrays
свойство. Например, синтаксис instance
idx
} = A
присваивает значение A
к содержавшему массиву в индексе idx
в Arrays
. Если idx
превышает текущее число элементов в Arrays
, braceAssign
создает элемент и присваивает A
к нему.
braceListLength
: Определяет количество значений, чтобы возвратиться из выражений индексации фигурной скобки, которые возвращают список, разделенный запятыми.
ArrayOfArrays
также наследовался RedefinesParen
поддерживать круглые скобки, индексирующие в некотором роде похожий на массивы ячеек. Например, синтаксис instance1
(
idx1
)
= instance2
(
idx2
)
присваивает содержавший массив в instance2
в idx2
к idx1
в instance1
. Чтобы видеть полный список абстрактных методов, которые должны быть реализованы при настройке индексации круглых скобок, смотрите matlab.mixin.indexing.RedefinesParen
.
Определение класса ArrayOfArrays
также включает две функции обработки ошибок:
ErrorForUnsupportedIndexing:
Предотвращает любую дополнительную индексацию после индексации круглых скобок в операций присвоения и ссылке.
ErrorForUnexpectedRightHandSide:
Ограничивает присвоения круглых скобок на случаи, когда правой стороной оператора является ArrayofArrays
экземпляр.
Код для ArrayOfArrays
Класс и функции обработки ошибок
classdef ArrayOfArrays < matlab.mixin.indexing.RedefinesParen & ... matlab.mixin.indexing.RedefinesBrace properties (Access=private) Arrays (1,:) cell end methods (Access=protected) function varargout = braceReference(obj,indexOp) [varargout{1:nargout}] = obj.Arrays.(indexOp); end function obj = braceAssign(obj,indexOp,varargin) if isscalar(indexOp) [obj.Arrays.(indexOp)] = varargin{:}; return; end [obj.Arrays.(indexOp)] = varargin{:}; end function n = braceListLength(obj,indexOp,indexContext) n = listLength(obj.Arrays,indexOp,indexContext); end function out = parenReference(obj,indexOp) ErrorForUnsupportedIndexing(indexOp); out = obj; out.Arrays = obj.Arrays.(indexOp); end function obj = parenAssign(obj,indexOp,in) ErrorForUnsupportedIndexing(indexOp); ErrorForUnexpectedRightHandSide(in); obj.Arrays.(indexOp) = in.Arrays; end function n = parenListLength(~,~,~) n = 1; end function obj = parenDelete(obj,indexOp) obj.Arrays.(indexOp) = []; end end methods (Access=public) function obj = ArrayOfArrays(varargin) if nargin > 0 obj.Arrays = varargin; else obj.Arrays = []; end end function out = cat(~,varargin) out = ArrayOfArrays; for ix = 1:length(varargin) tmp = varargin{ix}; if isa(tmp,'ArrayOfArrays') out.Arrays = [out.Arrays,tmp.Arrays]; else out.Arrays{end+1} = tmp; end end end function varargout = size(obj,varargin) [varargout{1:nargout}] = size(obj.Arrays,varargin{:}); end end methods (Static) function out = empty() out = ArrayOfArrays(); end end end function ErrorForUnsupportedIndexing(indexOp) if ~isscalar(indexOp) error('Indexing after parentheses indexing is not supported.'); end end function ErrorForUnexpectedRightHandSide(val) if ~isa(val,'ArrayOfArrays') error(['Parentheses assignment is only supported when the ' ... 'right-hand side is an ArrayOfArrays.']); end end
Используйте ArrayOfArrays
Экземпляр
Создайте ArrayOfArrays
экземпляр с двумя содержавшими массивами, вектором с 2 элементами и 3х3 матрицей.
myArrays = ArrayOfArrays([1 2],2*eye(3));
Используйте индексацию фигурной скобки, чтобы просмотреть второй содержавший массив. braceReference
метод принимает IndexingOperation
объект, который идентифицирует что поле для доступа.
myArrays{2}
ans = 3×3
2 0 0
0 2 0
0 0 2
Используйте фигурную скобку и индексацию круглых скобок, чтобы извлечь верхний правый угол матрицы во втором массиве. Класс вызывает braceReference
метод, чтобы получить доступ к содержавшему массиву в индексе 2 и затем вперед индексации круглых скобок к самой матрице.
myArrays{2}(1:2,2:3)
ans = 2×2
0 0
2 0
Добавьте третий элемент в экземпляр с помощью присвоения фигурной скобки. braceAssign
метод принимает IndexingOperation
объект, который описывает тип индексации операции (Brace
) и индексы сослались, и второй аргумент, который содержит значение, которое будет присвоено, в этом случае массив ячеек. Проверьте сложение.
myArrays{3} = {1:5,6:10}; myArrays{3}
ans=1×2 cell array
{[1 2 3 4 5]} {[6 7 8 9 10]}
Присвойте несколько новых значений myArrays{3}
. Поскольку присвоение включает несколько значений, MATLAB вызывает braceListLength
метод, чтобы определить, сколько элементов должно быть присвоено прежде, чем вызвать braceAssign
обрабатывать операцию присвоения.
[myArrays{3}{:}] = deal(5); myArrays{3}
ans=1×2 cell array
{[5]} {[5]}
Индивидуально настраиваемая индексация круглых скобок, реализованная классом, включает ссылки круглых скобок и присвоение похожим способом к тому, как эта индексация работает в массивах ячеек. Присвойте содержавшие массивы в индексах 1 и 2 myArrays
к новому ArrayOfArrays
экземпляр, x
. Класс вызывает parenAssign
выполнять операцию. Используйте индексацию фигурной скобки, чтобы проверить содержимое x
.
x = myArrays(1:2); x{1:2}
ans = 1×2
1 2
ans = 3×3
2 0 0
0 2 0
0 0 2
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.