Wie kann ich prüfen, ob eine MATLAB handle gültig ist?
Ich manipulieren von Daten auf einem Grundstück mit Griff:
x = 1:10; y = sin(x);
h1 = line(x,y);
Jedoch, wenn die Figur geschlossen wird, bevor das Skript ist eigentlich beendet, sowas gibt einen Fehler zurück.
>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.
Gibt es eine Möglichkeit zu überprüfen, ob h1
ist ein gültiges handle, bevor Sie jegliche Manipulationen mit ihm?
- Eine alternative zur überprüfung der Griff, die nützlich sein kann für einige Fälle, ist
set(h1, 'DeleteFcn', @delete_fcn_callback)
, wofunction delete_fcn_callback(hObj, event)
ist etwas, das Sie definieren, und es wird aufgerufen, wenn das Bild gelöscht wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
ishandle
- Funktion erst prüfen, ob ein Grafik-handle gültig ist:UPDATE:
Den neueren Versionen von MATLAB, Umgang mit Objekten sind tatsächliche Objekte, nicht nur numerische Werte. Die bessere Möglichkeit ist die Verwendung des
isvalid
Methode für den Umgang mit Objekten:ishandle
zu vergewissern, dass Sie noch gültig ist, dann werden Sie nie eine situation, wo das handle 0 ist. Nur das root-Objekt kann null sein; Grafiken verarbeitet werden es nie sein.isgraphics
ist alles, was Sie brauchen, (er überprüft die Gültigkeit bereits). Wenn Sie nur überprüfen müssen, um Wirksamkeit und nicht um das, was bestimmte Art von Grafik-Objekt es sich handelt (oder bereits wissen),isvalid
ist alles, was Sie brauchen.Beachten Sie, dass ishandle hat einen Nachteil, dass Sie auch akzeptiert gängige numerische Werte wie 0 (=desktop-Griff) und 1 (=erste open figure standardmäßig), die oft auch gültig behandelt obwohl vielleicht nicht die erwartet Griff. Sie wird dann immer noch eine Fehlermeldung, wenn Sie versuchen, eine nicht-existierende Eigenschaft.
Solche Fälle, einfach platzieren Sie Ihren code innerhalb eines exception-handling-block:
0
ist immer reserviert für das root-Objekt und plot-Objekte oder uicontrols immer Gleitkommazahlen verarbeitet. Zahlen sind integer-Griffe standardmäßig, aber Sie können erzwingen, dass MATLAB zu benutzen, eine floating-point-Griff für zahlen durch die Schaffung der Abbildung mit der Eigenschaft 'IntegerHandle` auf 'off'. Dies vermeidet die situation, wo ein Bild erstellt wird, wird das integer-handle gespeichert wird, und dann wird das Bild gelöscht und ein neues Bild erstellt mit den gleichen integer-handle (es ist also eigentlich eine andere Figur als der erste Griff bezeichnet).