Объекты указателя не оценивают к логическому 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