How does numArgumentsFromSubscript work?
Mostra commenti meno recenti
As an exercise, I am trying to overload the subsref method in my user-defined class myclass to support the assignment expression,
[obj.X{:}] = deal(1,2,3)
The attached code succeeds in doing so, but as the tracing output shows, numArgumentsFromSubscript is called multiple times with identical inputs before subsasgn is ever reached.
obj=myclass();
[obj.X{:}] = deal(1,2,3)
Why is the second invocation of numArgumentsFromSubscript necessary and, more generally, what are the formal rules for when numArgumentsFromSubscript is called relative to subsref/subsasgn?
classdef myclass
properties
X (1,3) cell
end
methods
function obj=subsasgn(obj,S,varargin)
assert(strcmp(S(1).type,'.') && ...
strcmp(S(1).subs,'X'), 'Unrecognized syntax')
obj.X=builtin('subsasgn',obj.X,S(2:end),varargin{:});
disp("Executing subsasgn") %tracing
end
function n=numArgumentsFromSubscript(obj,S,indcon)
import matlab.indexing.IndexingContext
N=numel(S);
if N>1 && isequal(S(2).subs,{':'}) && indcon==IndexingContext.Assignment
n = numel(obj.X);
else
n = 1;
end
disp("numArgumentsFromSubscript with n="+n) %tracing
end
end
end
3 Commenti
dpb
il 20 Giu 2026 alle 19:40
Just for grins I looked at the m-code for the table incarnation and it internally sets a recursion level of two...
...
recurseAtLevel = 2;
% Perform one level of indexing,
% then forward result to builtin numArgumentsFromSubscript
Raag
circa 4 ore fa
Hi,
It is my understanding that you are overloading 'subsref' and observing that 'numArgumentsFromSubscript' is invoked multiple times before subsref is executed.
The interaction between 'subsref', 'subsasgn', and 'numArgumentsFromSubscript' is part of MATLAB’s indexing evaluation process, where MATLAB may determine the number of inputs/outputs for an indexing expression depending on the context of use.
You can refer to the following documentation for more information:
Matt J
circa un'ora fa
Risposte (0)
Categorie
Scopri di più su Customize Object Indexing in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!