Main Content

自定义对象索引

默认对象索引

默认情况下,MATLAB® 类支持对象数组索引。许多类设计不要求对此行为进行修改。

数组使您能够使用下标表示法对数组元素进行引用和赋值。此表示法指定特定数组元素的索引。例如,假设您创建两个数值数组(使用 randi 和串联)。

创建一个由 1 到 9 的整数组成的 3×4 数组:

A = randi(9,3,4)
A =

     4     8     5     7
     4     2     6     3
     7     5     7     7

创建一个由数字 3、6、9 组成的 1×3 数组:

B = [3 6 9];

使用括号中的索引值对任一数组的元素进行引用和赋值:

B(2) = A(3,4);
B
B =
     3     7     9

MATLAB 默认行为也适用于用户定义的对象。例如,创建由同一个类的对象组成的数组:

for k=1:3
   objArray(k) = MyClass;
end

引用对象数组 objArray 中的第二个元素时,返回当 k = 2 时构造的对象:

D = objArray(2);
class(D)
ans =

MyClass

您可以将对象赋给由同一个类的对象组成的数组或赋给未初始化的变量:

newArray(3,4) = D;

对象数组的行为很像 MATLAB 中的数值数组。您不需要实现任何特殊方法即可为您的类提供标准数组行为。

有关数组索引的一般信息,请参阅数组索引

使用模块化索引类自定义对象索引

自 R2021b 开始提供。基于Code Patterns for subsref and subsasgn Methods推荐。

要修改类的索引行为,请从一个或多个模块化索引 mixin 类继承。每个类负责一组索引操作:

每个类都定义抽象方法,这些方法处理该类定义的每个索引操作的细节。实现这些方法来执行您的设计所需的操作。

您可以分别从这些类继承。例如,您可以仅从 RedefinesParen 继承,从而仅自定义圆括号索引。这种情况下的圆点和花括号索引行为是默认 MATLAB 行为。

您也可以选择只自定义一两个级别的索引,将其他操作转移给另一个 MATLAB 对象。例如,您可以创建一个类,它自定义圆括号索引(使用 RedefinesParen),但使用圆点方法调用的默认行为:

myInstance(2,1).value

请参阅Customize Parentheses Indexing中有关此行为的示例。

相关主题