subsasgn
Redefine subscripted assignment
Syntax
A = subsasgn(A,S,B)
Description
For classes authored in R2021b and later, the recommended process for
customizing indexing is to inherit from some combination of matlab.mixin.indexing.RedefinesParen
, matlab.mixin.indexing.RedefinesDot
, and matlab.mixin.indexing.RedefinesBrace
. For more information, see Customize Object Indexing.
A = subsasgn(A,S,B)
called by MATLAB^{®} for
the syntax A(i) = B
, A{i} = B
,
or A.i = B
when A
is an object.
MATLAB uses the builtin subsasgn
function
to interpret indexed assignment statements. Modify the indexed assignment
behavior of classes by overloading subsasgn
in
the class.
Note
You must call subsasgn
with an output argument. subsasgn
does
not modify the object used in the indexing operation (the first input
argument). You must assign the output to obtain a modified object.
Input Arguments

Object used in indexing operation 

Structure with two fields,


Value being assigned (right side of assignment statement) 
Output Arguments

Result of the assignment statement, which is the modified object passed in as the first argument. If your implementation of a 
Examples
Argument values for the subsasgn
for the
expression shown:
A(1:2,:) = B;
The syntax A(1:2,:) = B
calls A
= subsasgn(A,S,B)
where S
is a structure
with S.type = '()'
and S.subs = {1:2,':'}
.
The colon character (':'
) indicates a colon used
as a subscript.
For the expression:
A{1:2} = B;
The syntax A{1:2} = B
calls A =
subsasgn(A,S,B)
where S.type = '{}'
and S.subs
= {[1 2]}
.
For the expression:
A.field = B;
The syntax A.field = B
calls A =
subsasgn(A,S,B)
where S.type = '.'
and S.subs
= 'field'
.
For the expression:
A(1,2).name(3:5) = B;
Simple calls combine in a straightforward way for more complicated
indexing expressions. In such cases, length(S)
is
the number of subscripting levels. For instance, A(1,2).name(3:5)
= B
calls A = subsasgn(A,S,B)
where S
is
a 3by1 array of structures with the following values:
S(1).type = '()'  S(2).type = '.'  S(3).type = '()' 
S(1).subs = {1,2}  S(2).subs = 'name'  S(3).subs = {[3 4 5]} 
Tips
Within the subsasgn
method defined by a class, MATLAB calls the builtin subsasgn
. Calling the builtin
enables you to use the default indexing behavior when defining specialized
indexing.
Algorithms
In the assignment A(J,K,...) = B(M,N,...)
,
subscripts J
, K
, M
, N
,
and so on, can be scalar, vector, or arrays, when all the following
are true:
The number of subscripts specified for
B
, excluding trailing subscripts equal to 1, does not exceed the value returned byndims(B)
.The number of nonscalar subscripts specified for
A
equals the number of nonscalar subscripts specified forB
. For example,A(5,1:4,1,2) = B(5:8)
is valid because both sides of the equation use one nonscalar subscript.The order and length of all nonscalar subscripts specified for
A
matches the order and length of nonscalar subscripts specified forB
. For example,A(1:4,3,3:9) = B(5:8,1:7)
is valid because both sides of the equation (ignoring the one scalar subscript3
) use a 4element subscript followed by a 7element subscript.