2

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

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

a =
    175.0010         0   

>> ishandle(a)

ans =
    1     1

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

4

2 回答 2

2

ishandle 接受常见的数值,例如 0(=桌面句柄)和 1(= 默认情况下第一个打开的图形),它们通常也是有效的句柄。但是,如果您尝试设置为不存在的属性,您仍然会收到错误消息

要回答您的问题,请将您的代码放在异常处理块中:

try
   set(a,propName,propValue);
catch
   % do something useful... 
end

或者,如果您知道要查找的对象类型,请替换ishandle(a)为(例如):

ishandle(a) && strcmp(get(a,'type'),'line')
于 2013-07-04T04:25:30.810 回答
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'.
于 2013-07-04T05:22:52.520 回答