Welche zusätzlichen Daten werden von einer anonymen Funktion gespeichert?

8

Ich habe kürzlich gelernt, dass anonyme Funktionen große Mengen nicht verwendeter Daten mit sich führen können, auch wenn diese Daten nach der Instantiierung der anonymen Funktion erstellt werden. Das folgende Beispiel zusammen mit dem Befehl FUNCTIONS veranschaulicht dies,

%Vor%

Wenn ich nun im Basis-Arbeitsbereich den Befehl functions () auf 'fun' anwende, sehe ich

%Vor%

Ich möchte (mit offizieller Dokumentation, wenn möglich) verstehen, welche Regeln anonyme Funktionen verwenden, um zu entscheiden, welche Daten übertragen werden sollen. Das obige scheint darauf hinzuweisen, dass s.workspace{1} immer die externen Variablen und deren Werte enthält, die die anonyme Funktion tatsächlich verwendet. Unterdessen scheint s.workspace{2} Updates für Variablen zu enthalten, die in den Bereich kamen, bevor fun definiert wurde. Habe ich Recht, dass dies die Regeln sind? Aber wenn ja, warum enthält s.workspace{2} im obigen Fall ein Update für b, aber nicht für a und c?

Diese Dinge scheinen wichtig zu verstehen, da ich natürlich große Mengen an unbeabsichtigtem Speicher, der nach der Erstellung meiner anonymen Funktion zugewiesen wurde, tragen kann.

    
Matt J 10.02.2014, 16:02
quelle

1 Antwort

2

Ihr Verständnis der anonymen Funktion ist völlig richtig. Die Frage ist, warum a und c nicht aktualisiert werden und q und r nicht angezeigt werden. Matlab führt einige Code-Analysen durch und entfernt alle irrelevanten Zeilen. Weder die Variable wird gelesen noch eine Funktion aufgerufen. Vergleichen Sie das Verhalten mit diesem Code:

%Vor%

Wegen der eval('') kann die Codeanalyse keine irrelevanten Zeilen identifizieren. Die Ausgabe ist:

%Vor%     
Daniel 10.02.2014 17:00
quelle

Tags und Links