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

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