主要内容

matlab.mixin.indexing.RedefinesBraceclass

包:matlab.mixin.indexing

定制类索引操作使用括号

自从R2021b

描述

matlab.mixin.indexing.RedefinesBrace类是一个抽象父类,使您可以自定义如何使用括号索引操作的行为。RedefinesParenRedefinesDot使您能够定制索引操作用括号和点。分别从这些类可以继承,定制行为的一个方面,而不影响其他索引操作的默认行为。

定制您的类是如何处理与括号索引操作,继承RedefinesBrace并实现其抽象方法:

  • braceAssign

  • braceListlength

  • braceReference

类属性

文摘
真正的
HandleCompatible
真正的

类属性的信息,请参阅类属性

方法

全部展开

例子

全部折叠

这个例子展示了如何定制撑索引的ArrayofArrays类。ArrayOfArrays实现了一个1 -n数组的数组。所包含的数组可以被不同的类,形状和大小。类继承自两个matlab.mixin.indexing.RedefinesBracematlab.mixin.indexing.RedefinesParen。撑索引定制处理包含数组引用和作业:

  • braceReference:处理撑到引用数组类的属性。例如,语法实例{idx}访问包含在索引数组idx数组

  • braceAssign:处理支撑作业了数组财产。例如,语法实例{idx}=一个分配的价值一个包含数组的索引idx数组。如果idx超过当前的元素数量数组,braceAssign创建元素和分配一个到它。

  • braceListLength:决定从撑索引返回的值的数量表达式返回一个逗号分隔的列表。

ArrayOfArrays也继承自RedefinesParen支持括金宝app号索引的方式类似于细胞阵列。例如,语法instance1(idx1)=instance2(idx2)包含数组的分配instance2idx2idx1instance1。的完整列表时,必须实现抽象方法定制括号索引、明白了matlab.mixin.indexing.RedefinesParen

类的定义ArrayOfArrays还包括两个错误处理功能:

  • ErrorForUn金宝appsupportedIndexing:防止任何额外的索引在括号索引引用和赋值操作。

  • ErrorForUnexpectedRightHandSide:限制括号作业情况下的右侧是一个声明ArrayofArrays实例。

代码ArrayOfArrays类和错误处理函数

classdefArrayOfArrays < matlab.mixin.indexing。RedefinesParen &matlab.mixin.indexing.RedefinesBrace属性(访问=私人)数组(:1)细胞结束方法(访问=保护)函数varargout = braceReference (obj, indexOp) [varargout {1: nargout}] = obj.Arrays。(indexOp);结束函数obj = braceAssign (obj, indexOp变长度输入宗量)如果isscalar (indexOp) [obj.Arrays。(indexOp)] =变长度输入宗量{:};返回;结束[obj.Arrays。(indexOp)] =变长度输入宗量{:};结束函数n = braceListLength (obj indexOp indexContext) n = listLength (obj.Arrays, indexOp indexContext);结束函数= parenReference (obj indexOp) ErrorForUnsup金宝appportedIndexing (indexOp);= obj;出去了。一个rrays = obj.Arrays.(indexOp);结束函数obj = parenAssign (obj, indexOp) ErrorForUns金宝appupportedIndexing (indexOp);ErrorForUnexpectedRightHandSide(的);obj.Arrays。(indexOp) = in.Arrays;结束函数n = parenListLength (~ ~ ~) n = 1;结束函数obj = parenDelete (obj indexOp) obj.Arrays。(indexOp) = [];结束结束方法(访问=公共)函数obj = ArrayOfArrays(变长度输入宗量)如果输入参数个数> 0 obj。数组=varargin;其他的obj。一个rrays = [];结束结束函数出= = ArrayOfArrays猫(~,变长度输入宗量);第九= 1:长度(变长度输入宗量)tmp =变长度输入宗量第九{};如果isa (tmp,“ArrayOfArrays”)。一个rrays = [out.Arrays,tmp.Arrays];其他的出去了。一个rrays{end+1} = tmp;结束结束结束函数varargout =大小(obj,变长度输入宗量)[varargout {1: nargout}] =大小(obj.Arrays,变长度输入宗量{:});结束结束方法(静态)函数=空()= ArrayOfArrays ();结束结束结束函数ErrorForUn金宝appsupportedIndexing (indexOp)如果~ isscalar (indexOp)错误(“不支持索引后括号索引”。金宝app);结束结束函数ErrorForUnexpectedRightHandSide (val)如果~ isa (val,“ArrayOfArrays”)错误(“括号作业时仅支持”金宝app“右边是一个ArrayOfArrays。”]);结束结束

使用一个ArrayOfArrays实例

创建一个ArrayOfArrays实例包含两个数组,2-element向量和一个3×3的矩阵。

myArrays = ArrayOfArrays([1 - 2], 2 *眼(3));

第二个包含数组使用括号索引视图。的braceReference方法接受一个IndexingOperation对象,确定现场访问。

myArrays {2}
ans =3×32 0 0 0 2 0 0 0 2

使用括号,括号索引提取右上角的第二个数组的矩阵。类调用braceReference方法来访问包含数组索引2然后转发括号索引矩阵本身。

2:3 myArrays {2} (1:2)
ans =2×20 0 2 0

第三个元素添加到实例使用括号分配。的braceAssign方法接受一个IndexingOperation对象,它描述了类型的索引操作()和引用的索引,第二个参数包含要分配的值,在这种情况下,一个细胞数组。验证添加。

myArrays {3} = {1:5, 6:10};myArrays {3}
ans =1×2单元阵列{(1 2 3 4 5)}{[6 7 8 9 10]}

分配多个新值myArrays {3}。因为作业涉及到多个值,MATLAB®调用braceListLength方法来确定有多少元素需要分配之前调用braceAssign处理作业操作。

[myArrays{3}{}): =交易(5);myArrays {3}
ans =1×2单元阵列{[5]}{[5]}

定制的括号索引实现的类支持括号引用和任务以类似的方式在细胞阵列这个索引是如何工作的。分配指数1和2的包含数组myArrays到一个新的ArrayOfArrays例如,x。类调用parenAssign执行操作。使用括号索引来验证的内容x

x = myArrays (1:2);x {1:2}
ans =1×21 2
ans =3×32 0 0 0 2 0 0 0 2

版本历史

介绍了R2021b