MATLAB® вызывает subsref
или subsasgn
определить результат выполнения кода, который включает индексируемую ссылку или присвоение. Число элементов, на которое ссылаются или присвоенный операцией индексации, определяет количество использования аргументов MATLAB, чтобы вызвать subsref
и subsasgn
. Таким образом, код индексации определяет количество аргументов что MATLAB:
Возвращается от вызова до subsref
Передачи в вызов subsasgn
Поэтому код индексации определяет значение nargout
для вызова subsref
и значение nargin
для вызова subsasgn
.
Например, рассмотрите ValuesArray
класс.
classdef ValuesArray properties Values end methods function obj = ValuesArray(v) if nargin > 0 obj.Values = v; end end end end
Создайте массив 10 ValuesArray
объекты.
l = ValuesArray.empty; for k = 1:10 l(k) = ValuesArray(k); end
Эта преобразованная в нижний индекс ссылка возвращает список, разделенный запятыми трех элементов. Для этого оператора, значения nargout
в subsref
3
.
l(1:3).Values
ans = 1 ans = 2 ans = 3
Левая сторона преобразованного в нижний индекс оператора присваивания влияет на количество входных параметров что использование MATLAB, чтобы вызвать subsasgn
. Это преобразованное в нижний индекс присвоение присваивает три значения этим трем элементам, добавленным к массиву. Для этого присвоения, значения nargin
в subsasgn
5 (объект, подструктура индексации и эти три значения, чтобы присвоить).
[l(11:13).Values] = l(1:3).Values
l = 1x13 ValuesArray array with properties: Values
Если количество аргументов правой стороны не может удовлетворить количеству аргументов левой стороны, MATLAB возвращает ошибку:
[l(11:13).Values] = l(1).Values
Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
Если класс перегрузки subsref
поддерживать любой '{}'
, '.'
, или оба типа индексации и операции возвращают больше чем одно значение, перегрузка subsref
возвращать несколько значений с помощью varargout
:
function varargout = subsref(A,S) ... end
Если класс перегрузки subsasgn
поддерживать любой '{}'
, '.'
, или оба типа индексации и операции присваивают больше чем одно значение, перегрузка subsasgn
принять несколько значений с помощью varargin
:
function A = subsagn(A,S,varargin) ... end