逻辑表达式中的句柄
句柄对象不会计算成逻辑 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
是否是 Tag
属性为 myFigure
的特定图窗的句柄:
if h == findobj('Tag','myFigure') ...% h is correct figure end
如果您想确定是否有其他对象是同一状态,使用 isequal
:
hLine1 = line; hLine2 = line; isequal(hLine1,hLine2)
ans = 1