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