Количество Аргументов для subsref и subsasgn

Как MATLAB определяет количество аргументов

Вызовы 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 \in 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 и subsasgn Методы

Если класс перегрузки subsref поддерживать любой '{}', '.', или оба типа индексации и операции возвращают больше чем одно значение, перегрузку subsref возвратить несколько использований значений varargout:

function varargout = subsref(A,S)
   ...
end

Если класс перегрузки subsasgn поддерживать любой '{}', '.', или оба типа индексации и операции присваивают больше чем одно значение, перегрузку subsasgn принять несколько использований значений varargin:

function A = subsasgn(A,S,varargin)
   ...
end

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте