Main Content

逻辑表达式中的句柄

句柄对象不会计算成逻辑 truefalse。您必须使用函数检验关注的状态并返回逻辑值。

如果句柄有效

使用 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 是否是 Tag 属性为 myFigure 的特定图窗的句柄:

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

如果您想确定是否有其他对象是同一状态,使用 isequal

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

     1