使用图形句柄,您可以执行以下操作:
>> a = nan(1,5)
a =
NaN NaN NaN NaN NaN
>> a(3) = line([1 2],[1 2])
a =
NaN NaN 0.0042 NaN NaN
>> find(~isnan(a),1,'first')
ans =
3
如果这是用一个普通句柄派生类完成的,则会发生以下错误:
>> a(3) = MyObject(1,1,1)
The following error occurred converting from MyObject to double:
Error using double
Conversion to double from MyObject is not possible.
据我所知,图形手柄只是替身。自定义对象也可以这样操作吗?
示例:
MyObject.m
classdef MyObject < handle
properties
x
end
methods
function obj = MyObject(x)
if nargin < 1, x = NaN; end
obj.x = x;
end
end
end
MATLAB
>> a = MyObject.empty(0,3)
a =
0x3 MyObject array with properties:
x
>> a(3) = MyObject(10)
a =
1x3 MyObject array with properties:
x
>> a(3)
ans =
MyObject with properties:
x: 10
>> a(1)
ans =
MyObject with properties:
x: NaN
请注意,对象a(1:2)
是通过调用不带参数的默认构造函数来构造的。
另一种方式:
>> a = cell(1,3)
a =
[] [] []
>> a{3} = MyObject(10)
a =
[] [] [1x1 MyObject]
注意:句柄图形(HG)不是使用有文档的MCOS类系统实现的,而是使用较旧的、完全没有文档的UDD类。