Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

Indexed Reference

How Indexed Reference Works

Object indexed references are in three forms — parentheses, braces, and dot-name:

A(I)
A{I}
A.name

Each of these statements results in a call by MATLAB® to the subsref of class A, or a call to the built-in subsasgn function if the class of A does not implement a subsasgn method.

MATLAB passes two arguments to subsref and requires subsref to return the result of the indexed reference:

B = subsref(A,S)

The first argument is the object being referenced, A. The second argument, S, is a substruct with two fields:

  • S.type is a char vector containing '()', '{}', or '.' specifying the indexing type used.

  • S.subs is a cell array or char vector containing the actual index or name. A colon used as an index is passed in the cell array as the colon character ':'. Ranges specified using a colon (e.g., 2:5) are expanded to 2 3 4 5.

For example, the expression:

A(1:4,:)

Causes MATLAB to call subsref(A,S), where S is a 1-by-1 structure with a two-element cell array. The cell array contains the numbers 1, 2, 3, 4, and the colon character :.

S.type = '()'
S.subs = {1:4,':'} 

Returning the contents of each cell of S.subs gives the index values for the first dimension and a char vector ':' for the second dimension:

S.subs{:}
ans =

     1     2     3     4

ans =

:

The default subsref returns all array elements in rows 1 through 4 and all the columns in the array.

Similarly, this expression:

A{1:4}

Uses a cell array containing the numbers 1, 2, 3, 4.

S.type ='{}'
S.subs = {1:4} 

The default subsref returns the contents of all cell array elements in rows 1 through 4 and all the columns in the array.

This expression:

A.Name

Calls subsref(A,S), where the struct S has these values:

S.type = '.'
S.subs = 'Name'

Compound Indexed References

These simple calls are combined for more complicated indexing expressions. In such cases, length(S) is the number of indexing levels. For example,

A(1,2).PropertyName(1:4)

calls subsref(A,S), where S is a 3-by-1 array of structs with the values:

S(1).type = '()'    S(2).type = '.'              S(3).type = '()'
S(1).subs = {1,2}   S(2).subs = 'PropertyName'   S(3).subs = {1:4}

Related Topics

Was this topic helpful?