MATLAB® can use objects as indices in indexed expressions. The rules of array indexing apply — indices must be positive integers. Therefore, MATLAB must be able to derive a value from the object that is a positive integer for use in the indexed expression.
Indexed expressions like X(A)
, where A
is an object, cause MATLAB to call the subsindex
function. However, if an indexing expression results in a call to an overloaded subsref
or subsasgn
method defined by the class of X
, then MATLAB does not call subsindex
.
There are several ways to implement indexing of one object by another object, X(A)
:
Define a subsindex
method in the class of A
that converts A
to an integer. MATLAB calls A
's subsindex
method to perform indexing operations when the class of X
does not overload subsref
or subsasgn
.
If the class of X
overloads subsref
or subsasgn
, these methods can call the subsindex
method of A
explicitly. The class of A
must implement a subsindex
method that returns an appropriate value.
If the class of X
overloads subsref
or subsasgn
, these methods can contain code that determines an integer index value. In this case, the class of A
does not implement a subsindex
method.
subsindex
must return the value of the object as a zero-based integer index value in the range 0
to prod(size(X))-1
.
Suppose that you want to use object A
to index into object B
. B
can be a single object or an array, depending on the class designs.
C = B(A);
Here are two examples of subsindex
methods. The first assumes you can convert class A
to a uint8
. The second assumes class A
stores an index value in a property.
The subsindex
method implemented by class A
can convert the object to numeric format to be used as an index:
function ind = subsindex(obj) ind = uint8(obj); end
The class of obj
implements a uint8
method to provide the conversion from the object to an integer value.
Class A
implements subsindex
to return a numeric value that is stored in a property:
function ind = subsindex(obj) ind = obj.ElementIndex; end
Note
subsindex
values are 0-based, not 1-based.
numArgumentsFromSubscript
| subsasgn
| subsref