MATLAB支持对属于公共根类子类的对象进行分组
matlab.mixin.Heterogeneous
到单个数组中,该数组将具有最近的公共祖先类,例如:
hObj = [ uifigure, uibutton, gobjects(1) ];
K>> class(hObj)
ans =
'matlab.graphics.Graphics'
我想编写一个函数,测试传入的未指定大小的句柄列表(通常是标量,但可能是数组)是否属于特定的硬编码类或其后代。
如果输入是标量或齐次数组(即所有对象都具有相同的类),那么我们正在测试
目标类本身
(不包括子类),我们将从这样的函数中得到正确的结果:
function tf = isCorrectClass(hCandidate)
TARGET = 'matlab.ui.Figure';
tf = isa(hCandidate, TARGET);
end
然而,如果
hCandidate
是一个异构阵列,因此我们必须:
function tf = isCorrectClass(hCandidate)
TARGET = 'matlab.ui.Figure';
tf = arrayfun(@(x)isa(x, TARGET), hCandidate);
end
这是因为从异构数组中选择单个元素会使它们还原为自己的特定类。
问题
:我如何适应
isCorrectClass
函数,其中目标类是
Middle
(假设我的输入数组可能包含任何层次结构类的对象)?
% HierarchyRoot "implements" matlab.mixin.Heterogeneous
% / \
% Middle LeafD
% / | \
% LeafA LeafB LeafC