2009-07-01 4 views
5

Ich verwende Klassen und statische Methoden, um Funktionen in einem Namespace zu "scope", ähnlich wie C#. Jedes Mal, wenn ich einer Klasse eine neue Methode hinzufüge, wird sie jedoch zunächst nicht gefunden. Ich muss die MATLAB-Umgebung (2007a) neu starten, damit die neuen Methoden erkannt werden.Wie bekomme ich MATLAB, um neu hinzugefügte statische Methoden zu erkennen?

Sicher gibt es einen 'update' oder 'refresh' Typ Befehl, den ich verwenden kann, so dass ich die MATLAB-Umgebung nicht jedes Mal neu starten muss, wenn ich eine Funktion hinzufüge?

Antwort

6

diesen Aufruf Ausstellen zu CLEAR sollte es tun:

clear classes 

Einen unglücklicher Nebeneffekt davon ist, dass es auch effektiv ein klar all Fragen, die auch alle Variablen im Arbeitsbereich löscht (Dies würde jedoch trotzdem passieren, wenn Sie MATLAB schließen und neu starten). Dieses Löschen des Arbeitsbereichs dient eigentlich einem Zweck, da es alle Variablen des gleichen Typs wie die alte Version Ihrer Klasse entfernt, die möglicherweise nicht richtig mit der neuen Version Ihrer Klasse funktionieren würde.

Die Funktion REHASH kann Arbeit, aber ich bezweifle es (ich denke, es ist mehr mit Dateipfaden als Klassendefinitionen behandelt).

+0

Das funktioniert, danke! Ist es möglich, dies für eine einzelne Klasse zu tun? – Brendan

+0

Soweit ich weiß, gibt es keine Möglichkeit, CLEAR zu verwenden, um einzelne Klassen zu aktualisieren, die geändert wurden. Es ist alles oder nichts! =) – gnovice

+1

Versuchte Wiederherstellung, keine der Optionen funktioniert. Denken Sie, dass klare Klassen der einzige Weg ist, Prost! – Brendan

0

versuchen "clear classname"

+0

Ich habe Angst das funktioniert nicht, es akzeptiert es ohne Fehler, aber die Klasse wird nicht aktualisiert – Brendan

+0

Dies [sollte mit neueren Versionen von MATLAB arbeiten] (http://www.mathworks.de/help/techdoc/matlab_oop/brzqjky).html) –

1

Clearing Instanzen Ihrer Klasse funktionieren sollte.

Angenommen, Sie eine Instanz von "MyClass" in Ihrer Basis-Arbeitsbereich haben:

foo = MyClass; 

Nun nehmen wir Sie MyClass bearbeiten und neue statische Methode "bar" hinzufügen:

foo.bar(); % Will cause error, as foo is instance of previous "MyClass" 

jedoch "clear" -ing foo wird den Verweis auf die vorhergehende Klasse entfernen:

Dies sollte in Ordnung sein, wenn Sie Sie haben nur eine oder zwei Instanzen der Klasse in Ihrem Basisarbeitsbereich. Wenn Sie viele Instanzen der Klasse in Ihrer Basis-Arbeitsbereich haben, dann können Sie ein Skript zu schreiben, um sie zu löschen:

varList = whos; 
for iVar = 1:numel(varList) 
    if isequal('MyClass', varList(iVar).class) 
     clear(varlist(iVar).name); 
    end 
end 
clear('varList'); 
clear('MyClass'); 

Wenn Sie Instanzen der Klasse in mehreren Orten haben, können wünschen Sie das Skript erweitern wie angemessen.

Der letzte Aufruf zum Löschen des Klassennamens ist möglicherweise nur erforderlich, wenn Sie Änderungen an Klassen in einer Vererbungshierarchie vornehmen.

+0

siehe auch http://www.mathworks.de/help/techdoc/matlab_oop/brzqjky.html welches auch Instanzen auflistet, die man leicht vergessen könnte (z.B. in 'mlocked' Funktionen) –

Verwandte Themen