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

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

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

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

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

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

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

Когда класс перегружается numArgumentsFromSubscriptMATLAB вызывает этот метод вместо 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.

Примечание

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

Похожие темы