为什么ishandle
双输入返回 1?例如:
>> a = zeros(1, 2);
>> a(1) = line([1 2], [1 2]);
a =
175.0010 0
>> ishandle(a)
ans =
1 1
有没有办法检查句柄是否有效,对于非句柄对象返回 0?
ishandle
接受常见的数值,例如 0(=桌面句柄)和 1(= 默认情况下第一个打开的图形),它们通常也是有效的句柄。但是,如果您尝试设置为不存在的属性,您仍然会收到错误消息。
要回答您的问题,请将您的代码放在异常处理块中:
try
set(a,propName,propValue);
catch
% do something useful...
end
或者,如果您知道要查找的对象类型,请替换ishandle(a)
为(例如):
ishandle(a) && strcmp(get(a,'type'),'line')
Matlab 句柄实际上只是双精度数。当您使用图形对象(图形、轴、线等)时,Matlab 为每个项目分配一个非常具体的双精度作为句柄。
该ishandle
函数检查传入的数字是否用作可以由句柄表示的任何对象的句柄。
演示使用数字(始终分配整数值双精度数):
>> close all; %Close any open figures
>> ishandle(1) %Now the value 1 is not a handle
ans =
0
>> figure(1) %Open a figure, assign it the value 1
>> ishandle(1) %Now 1 i a handle
ans =
1
在上面的示例中,该值0
始终是一个句柄,代表 Matlab 根句柄对象。这是保存与命令窗口相关的一些设置的地方,它作为所有图形的父级。值 175.xxxx 是分配给您使用 plot 命令绘制的线的句柄。
一个有用的技巧是findobj
函数。它查找作为给定对象的子对象的所有对象,其参数与输入参数匹配。例如:
h = findobj(0,'type','figure'); Returns all figures
h = findobj(0,'type','line'); Returns all line objects in all figures
h = findobj(1,'type','line'); Returns all line objects in figure 1
h = findobj(1,'type','line','color','r'); Returns all line objects in figure 1 whose color is 'r'.