为什么双手输入的ishandle返回1?

时间:2013-07-04 03:56:28

标签: matlab handle

为什么ishandle为双输入返回1?例如:

>> a = zeros(1, 2);
>> a(1) = line([1 2], [1 2]);

a =
    175.0010         0   

>> ishandle(a)

ans =
    1     1

有没有办法检查句柄是否有效,对非句柄对象返回0?

2 个答案:

答案 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'.