Количество аргументов для индивидуально настраиваемых методов индексирования
n = numArgumentsFromSubscript(obj,s,indexingContext) возвращает количество ожидаемых входных параметров к n = numArgumentsFromSubscript(obj,s,indexingContext)subsasgn или количество ожидаемых выходных параметров от subsref.
numArgumentsFromSubscript перегрузки, чтобы описать количество значений, чтобы возвратиться из индексации выражений, которые возвращают или присваивают списку, разделенному запятыми. Таким образом, индексируя выражения, которые заканчиваются в индексации '.' или '{}'. Функция numArgumentsFromSubscript может:
Доступ к операциям индексации и индексам используется в выражении индексации.
Определите, сделана ли операция индексации в контексте ссылочного оператора, выражение передало функции или присвоению.
Если класс перегружает numArgumentsFromSubscript, MATLAB® вызывает его, чтобы определить количество элементов массива, вовлеченных в операцию индексации, когда число элементов больше, чем одно. Например, эти операции индексации '.' генерируют вызов 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 вывод, чтобы позволить MATLAB вызвать этот метод с конкретным количеством выходных аргументов.
function varargout = subsref(obj,s) ... end
Перегрузка numArgumentsFromSubscript вместо numel, чтобы управлять результатами перегруженного subsref и subsasgn. Перегрузка numArgumentsFromSubscript может избежать ошибок, вызванных путем перегрузки numel.