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
subsindex
values are 0-based, not 1-based.
numArgumentsFromSubscript
| subsasgn
| subsref