Число аргументов для настраиваемых методов индексирования
возвращает количество ожидаемых входных данных для n = numArgumentsFromSubscript(obj,s,indexingContext)subsasgn или количество ожидаемых результатов от subsref.
Перегрузка numArgumentsFromSubscript для описания количества значений, возвращаемых из выражений индексирования, которые возвращают или присваивают списку, разделенному запятыми. То есть индексирование выражений, которые заканчиваются на '{}' или '.' индексирование. numArgumentsFromSubscript функция может:
Доступ к операциям индексирования и индексам, используемым в выражении индексирования.
Определите, выполняется ли операция индексирования в контексте инструкции ссылки, выражения, переданного функции, или назначения.
Если класс перегружен numArgumentsFromSubscriptMATLAB ® вызывает его для определения количества элементов массива, задействованных в операции индексирования, если число элементов больше единицы. Например, эти'.' операции индексации генерируют вызов numArgumentsFromSubscript:
objArray.a - Количество элементов, на которые ссылается оператор (Statement)
func(objArray.a) - Количество элементов, возвращаемых в выражении (Expression)
[objArray.a] = rhs - Количество значений, присвоенных списку, разделенному запятыми (Assignment)
MATLAB использует контекст вызова для определения времени применения значения, возвращаемого numArgumentsFromSubscript. Ваша реализация numArgumentsFromSubscript может обеспечивать различные выходные данные для трех типов операторов индексирования. Например, эта перегрузка numArgumentsFromSubscript:
Изменяет ожидаемое число выходных аргументов с subsref для индексирования выражений, передаваемых функциям.
Использует подструктуру индексирования s для определения количества аргументов, необходимых для операции индексирования
function n = numArgumentsFromSubscript(obj,s,indexingContext) if indexingContext == matlab.mixin.util.IndexingContext.Expression n = 1; else n = length(s(1).subs{:}); end end
Реализация subsref метод с помощью varargout output, чтобы разрешить MATLAB вызывать этот метод с указанным количеством выходных аргументов.
function varargout = subsref(obj,s) ... end
Перегрузка numArgumentsFromSubscript вместо numel для управления результатами от перегрузки subsref и subsasgn. Перегрузка numArgumentsFromSubscript может избежать ошибок, вызванных перегрузкой numel.