Ich habe eine benutzerdefinierte Matrix-Klasse, dass ich Index der Lage sein wollen, wie:Matlab subsref und Ende
x = myobj(1,2).d(3,4) % myobj(1,2,3,4)
x = myobj(2, 3).d(3, end) % myobj(1,3,1,end)
Ich möchte diese auch für die Zuordnung zu arbeiten.
Ich habe angefangen mit:
class MyClass < double
methods
function obj = MyClass(x)
obj = [email protected](x);
end
function obj = subsref(obj, s)
varargout{:} = [email protected](obj, subsintercept(obj, s));
end
function obj = subsasgn(obj, s, b)
obj = [email protected](obj, subsintercept(obj, s), b);
end
end
end
und dann kann ich Schlamassel mit der Indizierung in subsintercept
. Ich habe jedoch ein Problem gefunden. Mit einer minimalen Implementierung:
function s = subsintercept(obj, s)
disp('subsintercept');
for i = 1:length(s)
disp(s(i));
end
end
bekomme ich dieses erwartete Verhalten
>> myobj = MyClass(zeros(1,2,3,4))
>> myobj(1,2).d(3,4)
subsintercept
type: '()'
subs: {[1] [2]}
type: '.'
subs: 'd'
type: '()'
subs: {[3] [4]}
<error due to not having finished subsintercept yet>
Aber diesen unerwarteten
>> myobj(1,2).d(3,end)
subsintercept
type: '()'
subs: {[1] [2]}
type: '.'
subs: 'd'
<error due to not having finished subsintercept yet>
- Warum Hinzufügen des
end
Ursache ich nicht die3
zu erhalten? - Ist dieses Verhalten dokumentiert?
Kann man ein wenig mehr Informationen darüber, was Sie Klasse aussieht. Ist "d" eine dynamische Eigenschaft oder was? – Suever
@Suever: 'd' existiert nicht. Die Klasse ist eine Unterklasse von 'double'. Es gibt keine Eigenschaften oder andere Methoden außer einem uninteressanten Konstruktor. Ich habe jetzt das Muster für all das hinzugefügt, aber ich denke, es verdeckt die Übersicht etwas. – Eric
Da 'd' nicht existiert, hat MATLAB keine Möglichkeit,' end' in etwas Nützliches umzuwandeln. Was erwarten Sie von 'end'? – Suever