Количество аргументов для настроенных методов индексирования
возвращает количество ожидаемых входов в n = numArgumentsFromSubscript(obj,s,indexingContext)subsasgn или количество ожидаемых выходов subsref.
Перегрузка numArgumentsFromSubscript для описания количества значений, возвращаемых из выражений индексации, которые возвращаются или присваиваются разделенному списками , разделенными запятыми. То есть индексация выражений, которые заканчиваются на '{}' или '.' индексация. The 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.