¿Por qué MATLAB lanza un error de "demasiados argumentos de salida" cuando sobrecargo el subref (referencia de subíndice)?
Como unejemplo de jugueteTengo una clase que simplemente ajusta un vector o una matriz en un objeto e incluye una marca de tiempo de cuando se creó. Estoy tratando de sobrecargarsubsref
así que eso
()
Las referencias funcionan exactamente como lo hacen con los tipos de vectores y matrices estándar{}
trabajos de referencia enexactamente de la misma manera que()
referenciación (nada que ver con las células en otras palabras).
La referenciación me permite acceder a laprivado Propiedades del objeto y otros campos que no son técnicamente propiedades.Código:
classdef TimeStampValue
properties (Access = private)
time;
values;
end
methods
%% Constructor
function x = TimeStampValue(values)
x.time = now();
x.values = values;
end
%% Subscripted reference
function x = subsref(B, S)
switch S.type
case '()'
v = builtin('subsref', B.values, S);
x = TimeStampValue(v);
case '{}'
S.type = '()';
v = builtin('subsref', B.values, S);
x = TimeStampValue(v);
case '.'
switch S.subs
case 'time'
x = B.time;
case 'values'
x = B.values;
case 'datestr'
x = datestr(B.time);
end
end
end
function disp(x)
fprintf('\t%d\n', x.time)
disp(x.values)
end
end
end
Sin embargo brace{}
referenciar no funciona. Yo corro este codigo
clear all
x = TimeStampValue(magic(3));
x{1:2}
y me sale este error:
Error using TimeStampValue/subsref
Too many output arguments.
Error in main (line 3)
x{1:2}
MException.last
me da esta información:
identifier: 'MATLAB:maxlhs'
message: 'Too many output arguments.'
cause: {0x1 cell}
stack: [1x1 struct]
lo cual no es útil porque lo único en la pila de excepciones es el archivo que contiene tres líneas de código que ejecuté anteriormente.
Puse un punto de interrupción en la primera línea de la instrucción switch ensubsref
pero MATLAB nunca lo alcanza.
¿Cuál es el trato aquí? Ambos()
y.
Haciendo referencia al trabajo como usted esperaría, entonces ¿por qué no{}
haciendo referencia al trabajo?