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