Изменение nargout и nargin для Методов индексирования

Когда изменить число аргументов

По умолчанию количество значений, на которые ссылается операция индексации, определяет сколько выходных аргументов использование MATLAB®, чтобы вызвать subsref. Точно так же количество значений, чтобы присвоить в индексируемой операции присвоения определяет сколько входных параметров использование MATLAB, чтобы вызвать subsasgn.

Если ваш проект класса требует, чтобы индексирующие операции возвратили или присвоили различный номер значений, чем номер, заданный операцией индексации, используйте numArgumentsFromSubscript, чтобы задать необходимый номер. numArgumentsFromSubscript обеспечивает управление nargout для subsref и nargin для subsasgn.

Если ваш класс использует numArgumentsFromSubscript, реализацию subsref и методы subsasgn, чтобы задать фактические значения, возвращенные или присвоенные путем индексации операций.

Перед релизом R2015b MATLAB MATLAB привел к различным результатам для некоторых выражений индексации, которые возвращают или присваивают списку, разделенному запятыми. Используйте numArgumentsFromSubscript, чтобы поддержать код, который полагается на поведение предыдущих релизов. Кроме того, теперь можно перегрузить numArgumentsFromSubscript вместо numel, чтобы достигнуть определенных результатов, не переопределяя, как numel работает.

Как изменить число аргументов

Когда класс перегружает numArgumentsFromSubscript, MATLAB вызывает этот метод вместо numel, чтобы вычислить количество аргументов, ожидаемых для subsref nargout и subsasgn nargin.

Если классы не перегружают numArgumentsFromSubscript, MATLAB вызывает numel, чтобы вычислить значения nargout или nargin.

MATLAB вызывает numArgumentsFromSubscript с тремя входными параметрами:

function n = numArgumentsFromSubscript(obj,s,indexingContext)
   ...
end
Входной параметрОписание

obj

Объект, метод subsref или subsasgn которого называется

s

Индексация структурирует, который содержит тип индексации и индексы, используемые в операции

indexingContext

Контекст, в котором происходит операция индексации: индексируемая ссылка используется в качестве оператора, ссылка на указатель, используемая в качестве аргумента функции и индексированного присвоения

MATLAB использует значение, возвращенное numArgumentsFromSubscript для индексируемой ссылки и присвоения. Определите контекст, в котором операция индексации выполняется путем тестирования значения indexingContext в реализации numArgumentsFromSubscript. Например, протестируйте на любого возможные контексты индексации.

function n = numArgumentsFromSubscript(obj,~,indexingContext)
   switch indexingContext
      case matlab.mixin.util.IndexingContext.Statement
         n = ...; % nargout for indexed reference used as statement
      case matlab.mixin.util.IndexingContext.Expression
         n = ...; % nargout for indexed reference used as function argument
      case matlab.mixin.util.IndexingContext.Assignment
         n = ...; % nargin for indexed assignment
   end
end

Для получения дополнительной информации и примеры, смотрите numArgumentsFromSubscript.

Примечание

Для версии R2015b MATLAB и более поздних релизов, перегрузки numArgumentsFromSubscript вместо numel, чтобы настроить индексацию для вашего класса.

Похожие темы