Обработка объектов не вычисляется как логическая true или false. Необходимо использовать функцию, которая проверяет состояние интереса и возвращает логическое значение.
Использовать isgraphics чтобы определить, содержит ли переменная допустимый дескриптор графического объекта. Например, предположим hobj является переменной в рабочей области. Перед работой с этой переменной проверьте ее достоверность:
if isgraphics(hobj) ... end
Можно также определить тип объекта:
if isgraphics(hobj,'figure') ...% hobj is a figure handle end
Нельзя использовать пустые объекты непосредственно в логических операторах. Использовать isempty возвращает логическое значение, которое можно использовать в логических операторах.
Некоторые свойства содержат дескриптор для других объектов. В случаях, когда другой объект не существует, свойство содержит пустой объект:
close all
hRoot = groot;
hRoot.CurrentFigure
ans = 0x0 empty GraphicsPlaceholder array.
Например, чтобы определить, существует ли текущая цифра, запросите корень CurrentFigure свойство, используйте isempty функция:
hRoot = groot; if ~isempty(hRoot.CurrentFigure) ... % There is a current figure end
Другой случай, когда код может встретить пустой объект, - это поиск дескрипторов. Например, предположим, что вы установили фигуру Tag свойство к вектору символов 'myFigure' и вы используете findobj чтобы получить дескриптор этой фигуры:
if isempty(findobj('Tag','myFigure')) ... % That figure was NOT found end
findobj возвращает пустой объект, если нет совпадения.
Существует два состояния равенства для ручек:
Любые две ручки относятся к одному и тому же объекту (тест с ==).
Объекты, на которые ссылаются любые два дескриптора, являются одним и тем же классом, и все свойства имеют одинаковые значения (тест с isequal).
Предположим, вы хотите определить, h является дескриптором для конкретной фигуры, которая имеет значение myFigure для своих Tag свойство:
if h == findobj('Tag','myFigure') ...% h is correct figure end
Если требуется определить, находятся ли различные объекты в одном состоянии, используйте isequal:
hLine1 = line; hLine2 = line; isequal(hLine1,hLine2)
ans =
1