How does numArgumentsFromSubscript work?
이전 댓글 표시
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
댓글 수: 1
dpb
2026년 6월 20일 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
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Customize Object Indexing에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!