Указатели в логических выражениях

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