Ich denke, dass das Hauptproblem in diesem Code ist, wie Sie myStruct
von Ihren Funktionen zugreifen. Werfen Sie einen Blick auf das folgende Stück Code:
function configureChannel(obj, Channel)
myStruct.Channel = Channel;
...
end
Was Sie soll denn es war tun Channel
in das Channel
Feld des aktuellen Objekts myStruct
‚s Channel
Eigenschaft zuweisen. Was es tatsächlich tut, ist äquivalent zu nennen:
myStruct = struct('Channel', Channel);
Das heißt, Sie einen neu lokal Variable im aktuellen Arbeitsbereich/Umfang configureChannel
, ohne tatsächlich die Eigenschaft des Objekts zu aktualisieren, erstellen obj
.
So ist die erste Korrektur Sie machen müssen, ist, wie Sie myStruct
in Ihrem setter Zugang:
obj.myStruct.Channel = Channel;
nächstes die Frage des Sparens ist.
Wenn eine Kopie eines in eine Datei Feld des Objekts Dumping, würde ich save
erwarten, dass Ihr beliebiges Objekt als struct
, zu behandeln und so struct
saving conventions gelten soll:
'-struct',structName
| Store the fields of the scalar structure specified by structName
as individual variables in the file. For example, save('filename.mat','-struct','S')
saves the scalar structure, S
.
So würde ich folgende erwarten arbeiten Haftungsausschluss: ich habe es nicht getestet:
save('filename.mat','-struct','obj.myStruct');
Andere Alternativen falls nicht die oben:
save('filename.mat','obj.myStruct'); % Alternative #1
tmp = obj.myStruct; save('filename.mat','tmp'); % Alternative #2
Eine letzte Sache - wie Sie vielleicht bemerkt haben, ich bin die Funktion Form von save
verwenden, weil ich es für besser verwaltbar/lesbar sein/narrensicher:
save(filename,variables,'-append');
Sie müssen Ihre Klasseneigenschaft mit dem Klassennamen voranstellen. – excaza
Du meinst so? save -appt registers.mat myClass.myStruct Es funktioniert nicht. – user1876942
Versuchen Sie 'save -appregate.mat obj.myStruct;'. Wenn es nicht funktioniert - lege es in eine temporäre Variable, dann speichere die Variable ('a = obj.myStruct; save ...'). Außerdem bin ich mir ziemlich sicher, dass Sie eine neue lokale Variable erstellen, wenn Sie 'myStruct.Channel = Channel;' Sie sollten 'obj.myStruct.Channel = Channel;' stattdessen tun. –