Количество аргументов для индивидуально настраиваемых методов индексирования
возвращает количество ожидаемых входных параметров к 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 метод с a varargout выведите, чтобы позволить MATLAB вызвать этот метод с конкретным количеством выходных аргументов.
function varargout = subsref(obj,s) ... end
Перегрузка numArgumentsFromSubscript вместо numel управлять результатами перегруженного subsref и subsasgn. Перегрузка numArgumentsFromSubscript может избежать ошибок, вызванных путем перегрузки numel.