## Overload `end`

for Classes

In a standard MATLAB^{®} indexing expression, `end`

returns the index value of the last element in the dimension in which
`end`

appears. For example, in `A(4,end)`

, the
`end`

method returns the index of the last element in the second
dimension of `A`

. You can overload `end`

in classes for
specialized behavior.

### Syntax and Default Behavior

This is the syntax MATLAB uses to call the `end`

method.

ind = end(A,k,n)

`A`

is the object being indexed into.`k`

is the dimension in the indexing expression where`end`

appears.`n`

is the total number of indices in the expression.`ind`

is the index value to use in the expression.

**Note**

You cannot call the `end`

method directly using this syntax.
MATLAB automatically calls the method when it encounters end in an indexing
expression.

For example, `A`

is a 2-by-3 array of doubles. When MATLAB encounters the expression `A(end,1)`

, it calls the
`end`

method with these arguments.

end(A,1,2)

`A`

is the object.`k = 1`

because`end`

appears in the first dimension of the indexing expression.`n = 2`

because the expression has two indices.

The `end`

method returns `2`

, which is the index of
the last element in the first dimension of `A`

.

### How `RedefinesParen`

Overloads `end`

Any overload of the `end`

method must have the calling syntax
`ind = end(A,k,n)`

. For example, the modular indexing class `matlab.mixin.indexing.RedefinesParen`

has a built-in overload of
`end`

.

function ind = end(obj,k,n) sz = size(obj); if k < n ind = sz(k); else ind = prod(sz(k:end)); end end

`if-else`

statement calculates the return value based on where the
`end`

appears in the indexing expression and whether the indexing
expression has values for all of the dimensions of the object array. For example, when
`B`

is a 2-by-3-by-2 object array of a type that inherits from
`RedefinesParen`

:`k < n`

: When`end`

is not the last value in the indexing expression, the overload returns the last value in that dimension. For`B(1,end,4)`

,`end`

returns the size of the second dimension,`3`

.`k = n`

: When`end`

is the last element in the indexing expression, the overload handles two cases:If the indexing expression references all the indices, then

`prod(sz(k:end))`

gives the same result as`sz(k)`

. For example, in`B(1,2,end)`

,`end`

returns`2`

.If the indexing expression does not reference all the indices, then

`prod(sz(k:end))`

returns the product of the size of dimension`k`

and the sizes of all unreferenced dimensions. For example, in`B(1,end)`

,`end`

returns the product of the sizes of the second and third dimensions,`6`

.

`RedefinesParen`

defines `size`

as an abstract method for
the class author to implement, so the two methods are dependent on one another for the
final behavior. See the Customize Parentheses Indexing example for a class
that implements a `size`

method that provides the expected
`end`

behavior with an array.