为什么ishandle
为双输入返回1?例如:
>> a = zeros(1, 2);
>> a(1) = line([1 2], [1 2]);
a =
175.0010 0
>> ishandle(a)
ans =
1 1
有没有办法检查句柄是否有效,对非句柄对象返回0?
答案 0 :(得分:2)
ishandle
接受常见的数值,如0(=桌面句柄)和1(默认情况下=第一个打开的数字),它们通常也是有效的句柄。但是,如果您尝试设置不存在的属性,仍会出现错误。
要回答您的问题,请将代码置于异常处理块中:
try
set(a,propName,propValue);
catch
% do something useful...
end
或者,如果您知道要查找的对象类型,请将ishandle(a)
替换为(例如):
ishandle(a) && strcmp(get(a,'type'),'line')
答案 1 :(得分:1)
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'.