Main Content

논리식에 있는 핸들

핸들 객체는 논리값 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 속성을 쿼리하여 현재 Figure가 있는지 여부를 확인하려면 다음과 같이 isempty 함수를 사용합니다.

hRoot = groot;
if ~isempty(hRoot.CurrentFigure)
   ... % There is a current figure
end

코드 실행 시 빈 객체가 발생할 수 있는 또 다른 경우는 핸들을 검색하는 경우입니다. 예를 들어, Figure의 Tag 속성을 문자형 벡터 'myFigure'로 설정하고 findobj를 사용하여 이 Figure의 핸들을 가져온다고 가정하겠습니다.

if isempty(findobj('Tag','myFigure'))
   ... % That figure was NOT found
end

findobj는 일치하는 항목이 없을 경우 빈 객체를 반환합니다.

핸들이 같은 경우

핸들이 같은 상태로는 두 가지가 있습니다.

  • 두 핸들이 동일한 객체를 참조합니다(==로 테스트).

  • 두 개의 핸들로 참조되는 객체가 동일한 클래스이고 모든 속성의 값이 동일합니다(isequal로 테스트).

Tag 속성의 값이 myFigure인 특정 Figure에 대한 핸들이 h인지 여부를 확인하고자 한다고 가정하겠습니다.

if h == findobj('Tag','myFigure')
   ...% h is correct figure
end

각기 다른 객체가 동일한 상태에 있는지 여부를 확인하려면 다음과 같이 isequal을 사용합니다.

hLine1 = line;
hLine2 = line;
isequal(hLine1,hLine2)
ans =

     1