exponenta event banner

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

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

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

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

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

Перед R2015b выпуска 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.

Примечание

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

Связанные темы