Subsref question using braces '{}' type and a char subs
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello, I am implementing subsref in my class for dealing with braces, '{}'. I want to be able to call
>> classname{'chars'}
but all I get is an error:
??? Error using ==> subsref
Too many output arguments.
The debugger never even gets into the subsref function for me to see whats happening. If I use the same logic but for '()' type indexing, it works fine. Similarly, if I use '{}' but with a number I can get the code to to into the subsref, but I need to be able to use '{}' with char subs not a number/index.
Here is the switch case for the '{}' type
switch s(1).type
case '{}'
v = obj.variable(s(1).subs);
if length(s) == 2
B = v.data(s(2).subs);
elseif length(s) == 3
switch s(3).subs
case data
B = v.data(s(2).subs);
case grid
B = v.grid(s(2).subs);
end
else
B = v;
end
10 commentaires
Walter Roberson
le 28 Fév 2011
I am hypothesizing that for some reason the type is not matching '{}'
Perhaps I have misunderstood. Are you indicating that you have demonstrated that it never reaches the switch s(1).type code? Or is it possible that that switch is executed but '{}' is not what is in s(1).type ?
Réponse acceptée
Philip Borghesani
le 1 Mar 2011
Your class needs a NUMEL function. A string is a matrix in MATLAB so classname{'foo'} is the same as calling classname{double('foo')}. Adding this function to your class will show you what is going on:
function num=numel(obj,varargin)
fprintf('NUMEL called with %d indices',nargin-1);
num=builtin('numel',obj,varargin{:});
fprintf(' NUMEL returned %d\n',num);
end
To make string inputs work the way you want have NUMEL return 1 or prod(size(obj)) for char type inputs depending on what behavior is desired.
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Dictionaries dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!