exponenta event banner

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

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