Probieren Sie es aus.MATLAB R2014b spart Zahlengriffe ohne zu fragen
In MATLAB R2014b, eine neue Funktion mit dem folgenden Code erstellen:
function f1 = fhandle_test(x,y)
f1 = figure;
scatter(x,y)
func = @(x) disp(x);
save('blob.mat','func')
end
nun die Funktion mit einigen Zufallsvektoren nennen:
fhandle_test(rand(1,5),rand(1,5))
Wenn ich das tue, ich diese Warnmeldung
Warning: Figure is saved in blob.mat. Loading this file recreates and displays the figure and its
contents. Refer to save for more information.
> In fhandle_test at 7
Und tatsächlich ist das Figurobjekt in der MAT-Datei gespeichert und die Figur ist restor ed, wenn ich die Datei lade. Soweit ich das beurteilen kann, geschieht dies nur, wenn ich ein Funktions-Handle oder ein Zellen-Array von Funktions-Handles speichere und nur wenn dies innerhalb einer Funktion geschieht.
es jetzt wieder versuchen, aber diesmal, um die Funktion zu ändern, so dass die Ausgabe der Zahl() auf eine Variable nicht zugeordnet:
function fhandle_test(x,y)
figure;
scatter(x,y)
func = @(x) disp(x);
save('blob.mat','func')
end
Diesmal keine Warnung.
Was passiert hier, und gibt es eine Möglichkeit, es zu verhindern, abgesehen von dem Löschen der Zahlengriffe vor dem Speichern? Ich möchte nicht, dass die Figurenobjekte in der MAT-Datei gespeichert werden und ich brauche die Griffe, meine Funktionen geben sie zurück. Ich würde es auch vorziehen, einen hässlichen Hack zu vermeiden, bei dem ich den Objektraum durchsuchen und die Grafikobjekte nach dem Speichern den Handgriffen zuweisen muss.
Große Antwort. Aber bist du dir sicher? "In Ihrem Fall, in dem Sie jedoch keine lokalen Variablen innerhalb Ihrer anonymen Funktion verwenden, bestimmt MATLAB nicht wirklich, welche lokalen Variablen beim Speichern der anonymen Funktion berücksichtigt werden sollen und speichert sie einfach." Ersetzen Sie 'func = @ (x) disp (x);' durch 'func = @ (x) disp (y);'. Ich bekomme genau das gleiche Verhalten. –
@StephenBosch Sorry, das war eine verwirrende Aussage. Ich habe es umdeutlich formuliert. MATLAB ist es egal, ob Sie in Ihrer anonymen Funktion lokale Variablen verwenden oder nicht. Es weiß nur, dass es * möglich ist * und speichert daher alle lokalen Variablen unabhängig davon, ob Sie sie verwenden oder nicht. – Suever